2014-10-07 28 views
15

flatMap ile zincirlenmiş 5 Observable s var. İlk dört Observable s'nin bir Exception üretmesi durumunda, farklı bir Exception türünü beşte birine yaymak istiyorum.RxJava zincirleme gözlenebilirler ve hata işleme (özel istisna yayılımı)

Nasıl elde edilir?

Teşekkürler.

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; 
      } 
}); 

sen de tamam olduğunu düşünüyorum yapın: bu henüz denenmemiş çözüm ile geldim? Aradığınız Ne

cevap

27

Eğer kaynaktan yayılan herhangi Throwable yakalamak için izin ve ya yeni gözlemlenebilir veya farklı Throwable yayarlar olur başka Observable ile yeniden başlamasına izin edecektir onErrorResumeNext olduğunu.

... 
    .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 verilerin Akışınızı işlemek için bir operatör olduğunu unutmayın ama sizi onError kod örneğinde sahiptir işlemek için izin vermeyecektir. Hatayı, yayına abone olduğunuz Observer'un onError geri bildirimi içinde işleyebilirsiniz.