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

作为示例,请考虑以下spock测试:

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,因为应该调用一个或另一个。

但是,我想知道如何处理在RuntimeException方法中调用onCompleted并想要处理该错误的情况。

您是否只是将onCompleted调用包装在try-catch中并在那里处理错误?

最佳答案

如果您认为其中可能会引发异常,则只需在onCompleted中使用try-catch即可。

正如我在评论中提到的那样,RxJava不应吞噬onCompleted的异常,而目前却是。但是,如果您知道可能会发生异常,则应该自己处理。

07-24 13:18