天天看點

Error Handling 錯誤處理Catch

很多操作符可用于對Observable發射的

onError

通知做出響應或者從錯誤中恢複,例如,你可以:

  1. 吞掉這個錯誤,切換到一個備用的Observable繼續發射資料
  2. 吞掉這個錯誤然後發射預設值
  3. 吞掉這個錯誤并立即嘗試重新開機這個Observable
  4. 吞掉這個錯誤,在一些回退間隔後重新開機這個Observable

這是操作符清單:

  • onErrorResumeNext( )

    — 訓示Observable在遇到錯誤時發射一個資料序列
  • onErrorReturn( )

    — 訓示Observable在遇到錯誤時發射一個特定的資料
  • onExceptionResumeNext( )

    — instructs an Observable to continue emitting items after it encounters an exception (but not another variety of throwable)訓示Observable遇到錯誤時繼續發射資料
  • retry( )

    — 訓示Observable遇到錯誤時重試
  • retryWhen( )

    — 訓示Observable遇到錯誤時,将錯誤傳遞給另一個Observable來決定是否要重新給訂閱這個Observable

=========================================================、

Catch

onError

通知中恢複發射資料

Error Handling 錯誤處理Catch

Catch

操作符攔截原始Observable的

onError

通知,将它替換為其它的資料項或資料序列,讓産生的Observable能夠正常終止或者根本不終止。

在某些ReactiveX的實作中,有一個叫

onErrorResumeNext

的操作符,它的行為與

Catch

相似。

RxJava将

Catch

實作為三個不同的操作符:

onErrorReturn

讓Observable遇到錯誤時發射一個特殊的項并且正常終止。

onErrorResumeNext

讓Observable在遇到錯誤時開始發射第二個Observable的資料序列。

onExceptionResumeNext

讓Observable在遇到錯誤時繼續發射後面的資料項。

onErrorReturn

Error Handling 錯誤處理Catch

onErrorReturn

方法傳回一個鏡像原有Observable行為的新Observable,後者會忽略前者的

onError

調用,不會将錯誤傳遞給觀察者,作為替代,它會發發射一個特殊的項并調用觀察者的

onComleted

方法。

onErrorResumeNext

Error Handling 錯誤處理Catch

onErrorResumeNext

onError

調用,不會将錯誤傳遞給觀察者,作為替代,它會開始鏡像另一個,備用的Observable。

onExceptionResumeNext

Error Handling 錯誤處理Catch

onErrorResumeNext

類似,

onExceptionResumeNext

方法傳回一個鏡像原有Observable行為的新Observable,也使用一個備用的Observable,不同的是,如果

onError

收到的

Throwable

不是一個

Exception

,它會将錯誤傳遞給觀察者的

onError

方法,不會使用備用的Observable。