2015-12-30 12 views
37

मैं वादा के साथ बहुत कुछ विकसित करता था और अब मैं आरएक्सजेएस में जा रहा हूं। आरएक्सजेएस का डॉक्टर वादे श्रृंखला से पर्यवेक्षक अनुक्रम में कैसे स्थानांतरित करने के बारे में एक बहुत स्पष्ट उदाहरण प्रदान नहीं करता है।आरएक्सजेएस अनुक्रम वादा करने के बराबर है। तो()?

उदाहरण के लिए, मैं आमतौर पर कई चरणों के साथ वादा चेन, लिखने

// a function that returns a promise 
getPromise() 
.then(function(result) { 
    // do something 
}) 
.then(function(result) { 
    // do something 
}) 
.then(function(result) { 
    // do something 
}) 
.catch(function(err) { 
    // handle error 
}); 

जैसे मैं RxJS शैली में इस वादे श्रृंखला को फिर से लिखने चाहिए कैसे?

उत्तर

42

डाटा प्रवाह (then के बराबर) के लिए:

Rx.Observable.fromPromise(...) 
    .flatMap(function(result) { 
    // do something 
    }) 
    .flatMap(function(result) { 
    // do something 
    }) 
    .subscribe(function onNext(result) { 
    // end of chain 
    }, function onError(error) { 
    // process the error 
    }); 

एक वादा Rx.Observable.fromPromise के साथ एक नमूदार में बदला जा सकता।

कुछ वादे ऑपरेटरों का प्रत्यक्ष अनुवाद होता है। उदाहरण के लिए RSVP.all, या jQuery.when को Rx.Observable.forkJoin द्वारा प्रतिस्थापित किया जा सकता है।

ध्यान रखें कि आपके पास ऑपरेटरों का एक समूह है जो डेटा को असीमित रूप से बदलने की अनुमति देता है, और उन कार्यों को करने के लिए जो आप वादे के साथ करना मुश्किल नहीं कर सकते हैं। आरएक्सजेएस डेटा की असीमित अनुक्रमों के साथ अपनी सभी शक्तियों को प्रकट करता है (अनुक्रम यानी 1 से अधिक असीमित मूल्य)।

त्रुटि प्रबंधन के लिए, विषय थोड़ा और जटिल है।

  • वहाँ catch और finally ऑपरेटरों भी
  • retryWhen भी त्रुटि
  • के मामले में एक दृश्य को दोहराने के लिए आप भी onError समारोह के साथ ग्राहक अपने आप में त्रुटियों के साथ सौदा कर सकते हैं मदद कर सकते हैं।

सटीक अर्थशास्त्र के लिए, वेब पर प्रलेखन और उदाहरणों पर गहराई से नज़र डालें, या यहां विशिष्ट प्रश्न पूछें।

यह निश्चित रूप से Rxjs साथ त्रुटि प्रबंधन में गहरी जाने के लिए एक अच्छा प्रारंभिक बिंदु होगा: https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sequences/error_handling.html

+0

मैं हमेशा देखना नमूदार अनुक्रम सदस्यता के साथ समाप्त होता है()। चूंकि यह केवल देखने योग्य वस्तु का एक कार्य है, क्या ऐसा करने का कोई कारण है? क्या यह अनुक्रम शुरू करने के लिए समारोह है? –

+0

बिल्कुल ऐसा ही। यदि सब्सक्राइब के माध्यम से कोई पर्यवेक्षक पास नहीं हुआ है, तो आपका अवलोकन करने योग्य कोई भी डेटा उत्सर्जित नहीं करेगा, इसलिए आपने कोई डेटा प्रवाह नहीं देखा है। – user3743222

+5

मैं आपको यह देखने के लिए अनुशंसा करता हूं: https://gist.github.com/staltz/868e7e9bc2a7b8c1f754। आईटी आधिकारिक डॉक्टर अधिक आकर्षक हो सकता है। – user3743222

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