我有一个简单的流:
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。只抛出异常。我在这里缺少什么?
答案 0 :(得分:5)
来自observeOn文件
请注意,onError通知将在onNext通知之前切断 如果Scheduler是真正的异步,则在发射线程上。
这意味着当你应用它时,首先发出onError&amp;因此,由于onError,因为流已经结束,所以不会调用onNext。
您可以执行以下操作以便首先接收onNext
observeOn(AndroidSchedulers.mainThread(), true)
这告诉Observable
延迟错误,直到startWith的onNext
被传递