2016-06-22 17 views
6

को नष्ट नहीं करता है, यह स्पष्ट नहीं है कि रीएक्टएक्सएक्स में ग्राहकों को त्रुटियों का प्रचार कैसे किया जाए, जैसे कि अवलोकन योग्य नष्ट नहीं होता है।रिएक्टिवएक्स: त्रुटि प्रबंधन जो अवलोकन योग्य

उदाहरण

observable.onNext(1); 
observable.onNext(2); 
observable.onError("Nope"); 
observable.onNext(3);<<won't work. 

मैं इस प्रतिबंध को स्वीकार के रूप में यह है, तथापि मैं अभी भी परिदृश्य में जहाँ मैं श्रोताओं नीचे की ओर पता करने के लिए एक त्रुटि आई और मैं नमूदार मरने के लिए नहीं करना चाहती चाहते हैं।

इसके लिए मुख्य उपयोग केस यूआई कोड है, यदि कोई त्रुटि आती है, तो मैं पहले से पंजीकृत सभी अवलोकनों के खिलाफ "सेटअप" को कॉल नहीं करना चाहता हूं।

संभव विकल्पों

क) एक डेटा क्षेत्र है कि एक कस्टम वस्तु और एक त्रुटि क्षेत्र

class Data 
{ 
    int value; 
    Error * error; 
} 

धक्का मैं इस समाधान

ख पसंद नहीं है) दो धाराओं है कर रहे हैं। डेटा के लिए एक और त्रुटियों के लिए एक।

observable.onNext(1); 
observable.onNext(2); 
errorObservable.onNext("Error"); 
observable.onNext(3); 

इसके लिए सबसे अच्छे सामान्य अभ्यास क्या हैं?

उत्तर

1

मैं निश्चित रूप से विकल्प ए के साथ जाऊंगा) - एक ऑब्जेक्ट बनाएं जो डेटा और/या त्रुटि दोनों ले जा सके। इससे कोई फ़र्क नहीं पड़ता कि आप उस ऑब्जेक्ट में डेटा और संभावित त्रुटि को कैसे लपेटेंगे, लेकिन onNext() ईवेंट के रूप में एक स्ट्रीम के माध्यम से दोनों को भेजना सही समाधान है जो ग्राहकों को सभी जानकारी और इसे संभालने की सभी स्वतंत्रता देता है।

बी) विकल्प अधिक जटिल एसिंक्रोनस परिदृश्यों में लागू करने के लिए काफी चुनौतीपूर्ण हो सकता है और शायद Subject एस का उपयोग करने का कारण बन जाएगा जो भी खराब है।

0

यदि आप स्रोत को देखने योग्य स्रोत में पुनः प्रयास() जोड़ते हैं, तो ग्राहक को पुनः सदस्यता लेने की आवश्यकता नहीं है।

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