2014-10-07 5 views
15

मेरे पासहै जो flatMap के साथ जंजीर हैं। यदि पहले चार Observable एस Exception उत्पन्न करते हैं तो मैं पांचवें स्थान पर Exception का एक अलग प्रकार प्रचार करना चाहता हूं।आरएक्सजेवा चेनिंग अवलोकन और त्रुटि हैंडलिंग (कस्टम अपवाद प्रचार)

यह कैसे प्राप्त किया जाता है?

धन्यवाद।

पीएस

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

आपको लगता है यह ठीक है कार्य करें: मैं यह अभी तक untested समाधान के साथ आए हैं?

उत्तर

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 अपने कोड उदाहरण में है संभाल करने के लिए अनुमति नहीं दी जाएगी। आप अपने Observer के onError कॉलबैक में त्रुटि को संभाल सकते हैं जहां आप स्ट्रीम की सदस्यता लेते हैं।

संबंधित मुद्दे