2015-12-16 102 views
1

我有要完成的任務序列,如果它們中的任何一個拋出異常想繼續下一個任務。繼續下一步Observable onError

但是在這個實現中,如果第一個REST調用失敗,它會在訂戶中引發onError。

想知道什麼是最好的運營商使用或我需要調用一些其他功能,使其恢復異常。

private void logout() { 
    // Observable from Retrofit to make logout service call 
    requestLogout() 
      .doOnNext(o -> { 
       clearNotifications(); 
      }) 
      .doOnNext(o -> { 
       unregisterGcm(); 
      }) 
      .doOnNext(o -> { 
       clearLocalData(); 
      }) 
      .doOnNext(o -> { 
       // clear all jobs 
       mJobManager.clear(); 
      }) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<Object>() { 
       @Override 
       public void onCompleted() { 
        // no op 
       } 

       @Override 
       public void onError(Throwable e) { 
        mView.navigateToLogin(); 
       } 

       @Override 
       public void onNext(Object o) { 
        mView.navigateToLogin(); 
       } 
      }); 
} 
+2

也許['onErrorResumeNext'](https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators) –

回答

0

如果你只是想重新訂閱使用Observable.retry()

.observeOn(AndroidSchedulers.mainThread()) 
.retry().subscribe(new Subscriber<Object>() { 
// rest of code 
0

於是我找到方法來執行所有的觀測量,即使其中一個有錯誤。但這並不能維持秩序。

我仍在尋找保存順序的方式,並且錯誤時應繼續觀察。

Observable.mergeDelayError(requestLogout(), 
      clearNotifications(), 
      unregisterGcm(), 
      clearLocalData(), 
      clearJobs()) 
      .first() 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<Object>() { 
          @Override 
          public void onCompleted() { 
           // no op 
          } 

          @Override 
          public void onError(Throwable e) { 
           mView.navigateToLogin(); 
          } 

          @Override 
          public void onNext(Object o) { 
           mView.navigateToLogin(); 
          } 
         } 
      );