使用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中并在那里处理错误?
答案 0 :(得分:0)
如果您认为可能存在异常,请在onCompleted
中使用try-catch。
正如我在评论中提到的,RxJava不应该吞噬onCompleted
的例外,但目前是;但是,如果你知道 有可能发生异常,你应该自己处理它。