2015-12-16 66 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(); 
          } 
         } 
      );