2014-10-07 109 views
15

我有5 Observable s它與flatMap鏈接。如果前四個Observable s產生一個Exception我想傳播一個不同類型的Exception到第五個。RxJava鏈觀察和錯誤處理(自定義異常傳播)

它是如何實現的?

謝謝。

P.S. 我想出這個尚未檢驗的解決方案:

flatMap(
     // onNext 
     new Func1<BoolResponse, Observable<?>>() { 
      @Override 
      public Observable<?> call(BoolResponse boolResponse) { 
       return request; 
      } 
     }, 
     // onError 
     new Func1<Throwable, Observable<?>>() { 
      @Override 
      public Observable<?> call(Throwable throwable) { 
       return Observable.error(new SomethingWentWrong()); 
      } 
     }, 
     // onCompleted 
     new Func0<Observable<?>>() { 
      @Override 
      public Observable<?> call() { 
       return request; 
      } 
}); 

你認爲這是OK?

回答

27

你要尋找的是onErrorResumeNext,這將讓你趕上從光源發出任何Throwable,讓您無論是一個新的觀察或其他Observable這將發出不同Throwable恢復。

... 
    .flatMap(...) 
    .flatMap(...) 
    .onErrorResumeNext(new Func1<Throwable, Observable<?>>() { 
     @Override 
     public Observable<?> call(Throwable throwable) { 
      // Here simply return an Observable which will emit the Throwable of your liking 
      return Observable.error(new Throwable(...)); 
     } 
    }) 
    .flatMap(...); 

記住flatMap是一個運營商來處理你的數據流,但它不會讓你處理onError在你的代碼示例。您可以在您訂閱流的的onError回調中處理錯誤。