2017-02-10 10 views
7

चेन obs1.flatmap(x -> obs2()).subscribe(sub) में obs2 त्रुटि उत्पन्न करता है, तो यह onError पर तत्काल sub पर कॉलिंग का कारण बनता है। यह के रूप में दस्तावेज है:RxJava FlatMap: त्रुटियों को कैसे छोड़ें?

ध्यान दें कि यदि व्यक्ति स्रोत flatMap द्वारा प्रत्यक्ष कर से आइटम को मैप किया observables के किसी भी onError लागू द्वारा रोकता है नमूदार flatMap द्वारा उत्पादित ही तुरंत गर्भपात और आह्वान onError होगा।

लेकिन यह obs2 त्रुटियों को अनदेखा करके उत्सर्जक जारी रखने के obs1 बनाने के लिए संभव है?

उत्तर

0

क्या आप obs2() के अंदर एक बड़ा प्रयास-पकड़ ब्लॉग नहीं बना सकते हैं और कैच ब्लॉग को खाली छोड़ सकते हैं? कोई त्रुटि नहीं फेंक दी जाएगी और इसलिए onErrorsub नहीं कहा जाएगा, है ना?

6

आरएक्स कुछ ऑपरेटरों को त्रुटियों से निपटने के लिए प्रदान करता है। बस obs2 से एक तीसरा अवलोकन योग्य बनाएं जो त्रुटि को प्रसारित नहीं करता है।

Observable<YourType> obs3 = obs2.onErrorResumeNext(Observable.<YourType>empty()); 
obs1.flatmap(x -> obs3) 
2

.onErrorResumeNext - आप इस इस तरह से आप पहले से उत्सर्जित मूल्य है, जो जब संभाला एक और नमूदार जहां एक और दृष्टिकोण की कोशिश कर सकते करने के लिए एक त्रुटि का उत्पादन पारित करेंगे का उपयोग इसे दूसरे तरीके से संभालने के लिए प्रयास करने के लिए कर सकते हैं। या त्रुटि मामले को संभाल लें।

.onErrorReturn - यदि यह आपके लिए ठीक है, तो बस कुछ डिफ़ॉल्ट मान वापस करें और त्रुटि को अनदेखा करें।

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