Error handling 如何避免在onCompleted中抛出的异常被吞并

Error handling 如何避免在onCompleted中抛出的异常被吞并,error-handling,rx-java,Error Handling,Rx Java,使用rxJava 1.1.3,在onCompleted处理中引发异常时,不会调用onError,也不会将错误传播到调用线程。它只是消失了 作为一个例子,考虑下面的斯波克检验: def "when a onCompleted throws an IllegalStateException, it's handled by the onError handler"() { given: boolean onErrorCalledFromSubscribe = false wh

使用rxJava 1.1.3,在
onCompleted
处理中引发异常时,不会调用
onError
,也不会将错误传播到调用线程。它只是消失了

作为一个例子,考虑下面的斯波克检验:

def "when a onCompleted throws an IllegalStateException, it's handled by the onError handler"() {
    given:
    boolean onErrorCalledFromSubscribe = false
    when:
    Observable.just(1, 2, 3)
            .subscribe(
            Actions.empty(),
            { onErrorCalledFromSubscribe = true},
            {throw new IllegalStateException("I'm behaving badly")})
    then:
    noExceptionThrown()
    onErrorCalledFromSubscribe == true
}
上述测试失败,因为从未调用onErrorCalledFromSubscribe,并且在测试结束时为false

现在,我可以想象,一旦调用了
onCompleted
,就不应该调用
onError
,因为应该调用其中一个或另一个

但是,我想知道如何处理这样的情况:在
onCompleted
方法中调用了
RuntimeException
,并且您希望处理错误


您是否简单地将
onCompleted
调用包装在一个try-catch中并在那里处理错误?

如果您认为其中可能会抛出异常,只需在
onCompleted
中使用try-catch即可


正如我在评论中提到的,RxJava不应该吞并
onCompleted
的异常,但目前是;尽管如此,如果您知道可能会出现异常,您应该自己处理。

这似乎是RxJava本身的一个错误-不应该完全吞没异常。我调查了它,我们确定它是一个错误:。现在有一个PR可以在下一版本的RxJava中修复它: