2014-10-07 6 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; 
      } 
}); 

Как вы думаете, это нормально?

ответ

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 имеет в вашем примере кода. Вы можете обработать ошибку в своем обратном вызове ObserveronError, где вы подписаны на поток.

Смежные вопросы