【发布时间】:2015-09-09 19:19:58
【问题描述】:
我连接两个可观察对象以首先显示缓存中的数据,然后开始从网络加载数据并显示更新的数据。
Observable.concat(
getContentFromCache.subscribeOn(dbScheduler),
getContentFromNetwork.subscibeOn(networkScheduler)
).observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
如果没有网络连接,第二个 observable 在调用 OnSubscribe 后立即失败。
如果第二个 observable 立即失败,来自第一个 observable 的数据将丢失。 onNext 方法永远不会在订阅者中调用。
我认为,这可能是由于 OperatorConcat.ConcatSubscriber 中的以下代码
@Override
public void onNext(Observable<? extends T> t) {
queue.add(nl.next(t));
if (WIP_UPDATER.getAndIncrement(this) == 0) {
subscribeNext();
}
}
@Override
public void onError(Throwable e) {
child.onError(e);
unsubscribe();
}
看起来收到错误后它取消订阅,并且所有待处理的 onNext 都丢失了。
解决我的问题的最佳方法是什么?
更新
看起来我已经找到了解决方案,我没有为串联的可观察对象设置 observOn,而是为每个可观察对象设置了 observOn。
Observable.concat(
getContentFromCache.subscribeOn(dbScheduler).observeOn(AndroidSchedulers.mainThread()),
getContentFromNetwork.subscibeOn(networkScheduler).observeOn(AndroidSchedulers.mainThread())
)
.subscribe(subscriber);
【问题讨论】:
-
物品的顺序对您来说重要吗?
-
是的,这很重要。
标签: rx-java