Rx Java mergeDelayError无法按预期工作
问题内容:
我正在使用RxJava和带有RxAndroid的Android应用程序。我正在使用mergeDelayError将两个复古拟合网络调用合并为一个可观察的对象,如果其中一个对象发出一个,则将处理发出的项目,而如果其中一个对象发出的则将处理错误。这是行不通的,并且仅在遇到任何错误时才触发onError操作。现在,为了测试这一点,我转到了一个非常简单的示例,当我进行onError调用时,仍然从未调用successAction。请参见下面的示例。
Observable.mergeDelayError(
Observable.error(new RuntimeException()),
Observable.just("Hello")
)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.finallyDo(completeAction)
.subscribe(successAction, errorAction);
仅当我使用两个成功可观察对象时,才会调用成功动作。我是否应该使用mergeDelayError应该如何工作?
编辑:
我发现如果删除observeOn
,subscribeOn
一切都会按预期进行。我需要指定线程,并认为这是使用Rx的重点。知道为什么指定这些Schedulers
会破坏行为吗?
问题答案:
这似乎仍然是mergeDelayError运算符中的错误,但是我能够通过为每个可观察对象复制ObserverOn和Subscribe on来使其工作。
Observable.mergeDelayError(
Observable.error(new RuntimeException())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()),
Observable.just("Hello")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
)
.finallyDo(completeAction)
.subscribe(successAction, errorAction);