簡體   English   中英

如何返回一個RxJava Observable,保證不會拋出OnErrorNotImplementedException?

[英]How can I return an RxJava Observable which is guaranteed not to throw OnErrorNotImplementedException?

我想在我的應用程序中創建一個模式,其中返回的所有Observable<T>對象都有一些默認的錯誤處理,這意味着訂閱者可以使用.subscribe(onNext)重載而不用擔心應用程序崩潰。 (通常你必須使用.subscribe(onNext, onError) )。 有沒有辦法實現這個?

我已經嘗試使用onErrorReturndoOnErroronErrorResumeNext附加到Observable - 沒有任何幫助我的情況。 也許我做錯了,但是如果Observable中發生錯誤,我仍然會得到rx.exceptions.OnErrorNotImplementedException

編輯1:這是發出錯誤的Observable的示例,我想在某個中間層處理:

Observable.create(subscriber -> {
    subscriber.onError(new RuntimeException("Somebody set up us the bomb"));
});

編輯2:我已經嘗試過這段代碼來代表使用者處理錯誤,但我仍然得到OnErrorNotImplementedException

// obs is set by the method illustrated in edit 1
obs = obs.onErrorResumeNext(throwable -> {
    System.out.println("This error is handled by onErrorResumeNext");
    return null;
});
obs = obs.doOnError(throwable -> System.out.println("A second attempt at handling it"));
// Consumer code:
obs.subscribe(
    s -> System.out.println("got: " + s)
);

這將工作 - 關鍵是return Observable.empty();

private <T> Observable<T> attachErrorHandler(Observable<T> obs) {
    return obs.onErrorResumeNext(throwable -> {
        System.out.println("Handling error by printint to console: " + throwable);
        return Observable.empty();
    });
}

// Use like this:
Observable<String> unsafeObs = getErrorProducingObservable(); 
Observable<String> safeObservable = attachErrorHandler(unsafeObs);
// This call will now never cause OnErrorNotImplementedException
safeObservable.subscribe(s -> System.out.println("Result: " + s));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM