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应该如何工作?

编辑:

我发现如果删除observeOnsubscribeOn一切都会按预期进行。我需要指定线程,并认为这是使用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);