使用rxJava 1.1.3時,在onCompleted
處理中拋出異常時,不會調用onError
,也不會將錯誤傳播到調用線程。它只是消失。如何避免在onCompleted中引發的異常被吞噬
作爲一個例子考慮以下斯波克測試:和
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中並處理錯誤?
這看起來像是一個RxJava本身的錯誤 - 完全吞嚥異常不應該發生。 –
我看着它,我們確定它是一個錯誤:https://github.com/ReactiveX/RxJava/issues/3885。現在有一個公關可以在下一個版本的RxJava中修復它:https://github.com/ReactiveX/RxJava/pull/3886 –