使用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
的异常,而目前却是。但是,如果您知道可能会发生异常,则应该自己处理。