从doOnSubscribe()抛出时,异常不会传播到onError()

时间:2017-02-16 16:28:10

标签: rx-java rx-java2

有一个PublishProcessor调用.doOnSubscribe(checkCondition)运算符来执行某些检查。 checkCondition旨在抛出UnsupportedOperationException,然后必须沿着流向onError()方法传播给订阅者。相反,UndeliverableException被抛出并且进程崩溃。

publishProcessor
    .filter(() -> { // predicate })
    .observeOn(scheduler)
    .doOnSubscribe(checkCondition)
    .to((sourceFlowable) -> new FancyFlowable(sourceFlowable)))
    .safeSubscribe(subscriber);

有谁知道这里出了什么问题?为什么从checkCondition抛出的异常不会传播到订阅者的onError

2 个答案:

答案 0 :(得分:1)

这是RxJava 2的doOnSubscribe运算符的错误。如果onSubscribe回调崩溃,则可以Throwable合法地通过onError发出Observable.defer(() -> checkCondition ? error(...) : publishProcessor)信号。我很快就会发布一个修复程序。

目前,this comment可能是您的解决方法:

  

{{1}}

答案 1 :(得分:0)

可能因为那没有意义; doOnSubscribe在可观察链正确初始化之前运行。你考虑过这样的事吗?

if(checkCondition) {
  Observable.error(...).safeSubscribe(subscriber);
}

然后继续使用原始代码(sans doOnSubscribe)。