RxJava操作符-異常處理系

一般情況下,RxJava產(chǎn)生的一切異常,都會傳遞至onError進(jìn)行處理。但在有些情況下,我們需要在onError之前捕獲這些異常并作相應(yīng)的處理,此時就用到了RxJava的Error Handling系列操作符。

RxJava的Error Handing系列操作符有3個:

  • onErrorReturn
  • onErrorResumeNext
  • onExceptionResumeNext

onErrorReturn(Func1)


The onErrorReturn method returns an Observable that mirrors the behavior of the source Observable, unless that Observable invokes onError in which case, rather than propagating that error to the observer, onErrorReturn will instead emit a specified item and invoke the observer’s onCompleted method.

以上為doc說明,說白了就是該操作符會攔截(攔截指的是不會觸發(fā)onError,下同)發(fā)送給觀察者的異常,并發(fā)送出一個正常的item,這個item需要我們自己在Func1中自定義。

.onErrorReturn(new Func1<Throwable, Object>() { 
    @Override 
    public Object call(Throwable throwable) { 
        // TODO: handle throwable then return specified object 
        return null; 
    }
})

onErrorResumeNext(Func1)

onErrorResumeNext(Observable)


The onErrorResumeNext method returns an Observable that mirrors the behavior of the source Observable, unless that Observable invokes onError in which case, rather than propagating that error to the observer, onErrorResumeNext will instead begin mirroring a second, backup Observable.

同樣是產(chǎn)生源Observable的鏡像,攔截異常,并向事件流發(fā)射一個Observable,可直接傳入一個Observable對象,或由Func1生成。

onExceptionResumeNext(Observable)


Much like onErrorResumeNext method, this returns an Observable that mirrors the behavior of the source Observable, unless that Observable invokes onError in which case, if the Throwable passed to onError is an Exception, rather than propagating that Exception to the observer, onExceptionResumeNext will instead begin mirroring a second, backup Observable. If the Throwable is not an Exception, the Observable returned by onExceptionResumeNext will propagate it to its observer’s onError method and will not invoke its backup Observable.

和onErrorResumeNext很像,只不過此操作符攔截的是Exception,并且參數(shù)只能是Observable對象。需注意的是,如果產(chǎn)生的Throwable不是Exception,會被發(fā)送至由onExceptionResumeNext返回的Observable所注冊的Observer中,而不會調(diào)用backup Observable(這個backup是指的什么,源Obervable嗎?)。

doOnError(Action1)


這個操作符并不在官方文檔的Error Handling系列中,而屬于Do系列,和Error Handling系列不同,doOnError并不會攔截異常,只是通過Action1回掉傳入Thorwable,該Throwable還是會發(fā)送至onError。

之所以放在這里一起說,是因為我在開發(fā)時需要在返回未登陸異常的時候,清除一下本地的UserCache,異常還是需要被正常發(fā)送給觀察者。最開始還用onErrorReturn去處理,完成后再手動拋出一個RuntimeException,結(jié)果導(dǎo)致產(chǎn)生其他Exception或Throwable時不能得到正確處理,真是傻透了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 1,065評論 0 3
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對于擴展包,由于使用率較低,如有需求,請讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,232評論 8 93
  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,994評論 0 10
  • 我從去年開始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy閱讀 5,778評論 7 62
  • 【0512今日話題】 你經(jīng)歷過的最難忘的生日是哪一次?(不管是別人的還是自己的。) 看到這個問題的時候,首先浮現(xiàn)在...
    冰棍兒嗝閱讀 417評論 7 2

友情鏈接更多精彩內(nèi)容