如何避免在onCompleted中抛出的异常被吞噬

时间:2016-04-27 10:32:47

标签: error-handling rx-java

使用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中并在那里处理错误?

1 个答案:

答案 0 :(得分:0)

如果您认为可能存在异常,请在onCompleted中使用try-catch。

正如我在评论中提到的,RxJava不应该吞噬onCompleted的例外,但目前是;但是,如果你知道 有可能发生异常,你应该自己处理它。