与observeOn结合使用时,RxJava startsWith运算符被忽略

时间:2018-03-29 11:06:09

标签: android kotlin rx-java rx-java2

我有一个简单的流:

Observable.error<Int>(Exception()).startWith(1).subscribe {
        println("Item is $it")
    }

一切都像预期的那样发挥作用。首先使用整数1调用onNext然后抛出异常,但是当我通过添加observeOn来改变流时:

Observable.error<Int>(Exception()).startWith(1).observeOn(AndroidSchedulers.mainThread()).subscribe {
        println("Item is $it")
    }
永远不会调用

onNext。只抛出异常。我在这里缺少什么?

1 个答案:

答案 0 :(得分:5)

来自observeOn文件

  

请注意,onError通知将在onNext通知之前切断   如果Scheduler是真正的异步,则在发射线程上。

这意味着当你应用它时,首先发出onError&amp;因此,由于onError,因为流已经结束,所以不会调用onNext。

您可以执行以下操作以便首先接收onNext

observeOn(AndroidSchedulers.mainThread(), true)

这告诉Observable延迟错误,直到startWith的onNext被传递