AndroidSchedulers.mainThread比onNext更早地观察到onError

时间:2018-01-16 16:56:22

标签: rx-java2 rx-android

今天我因为AndroidSchedulers.mainThread()

遇到麻烦而陷入困境
Obervable.create(emitter -> {
  emitter.onNext(1);
  emitter.onNext(2);
  emitter.onNext(3);
  // Thread.sleep(10);
  emitter.onError(new RuntimeException("error"));
}).subscribeOn(io())
.doOnEach(logger)
.observeOn(AndroidSchedulers.mainThread())
.doOnEach(logger)
.subscribe();

前记录器按顺序打印出1,2,3和错误,但后者不胜。相反,某些onNext会被忽略,onError会提前发送。 这是故意的吗?我不相信。我该如何避免这种行为? 如果我发表评论Thread.sleep(10),那就完全可以了。

附录

感谢akarnokd,我仔细阅读了JavaDoc,发现有意Observable#observeOn(Scheduler)将优先onError而不是onNext。我应该使用Observable#observeOn(Scheduler, boolean)重载来强制执行严格排序中观察到的所有事件。

0 个答案:

没有答案