2016-02-24 14 views
39

कोणीय 1.x में मुझे कभी-कभी कई http अनुरोध करने की आवश्यकता होती है और सभी प्रतिक्रियाओं के साथ कुछ करना पड़ता है। मैं एक सरणी में सभी वादों को फेंक दूंगा और Promise.all(promises).then(function (results) {...}) पर कॉल करूंगा।आरएक्सजेएस ऑब्जर्वेबल के साथ वादा। सभी व्यवहार?

कोणीय 2 सर्वोत्तम प्रथाएं http अनुरोधों में वादे के प्रतिस्थापन के रूप में आरएक्सजेएस के Observable के उपयोग की ओर इशारा करते हैं। अगर मेरे पास http अनुरोधों से बनाए गए दो या दो से अधिक भिन्न ऑब्जर्वेबल हैं, तो क्या यह Promise.all() के बराबर है?

उत्तर

37

नकल Promise.allforkJoin ऑपरेटर का उपयोग करने के लिए है के लिए और अधिक सरल विकल्प (यह सब observables समानांतर में शुरू होता है और अपने पिछले तत्वों में शामिल):

क्षेत्र से बाहर एक सा है, लेकिन मामले में यह चेनिंग वादे के विषय पर, मदद करता है, आप एक सरल flatMap उपयोग कर सकते हैं RxJS Promise Composition (passing data)

+1

अगर मैं 2 कॉल एक वापसी वादा और एक अन्य वापसी नमूदार है मैं उपयोगकर्ता forkjoin कर सकते हैं? या वादा.all()? या कोई नहीं, मुझे दो कार्यों को एक ही प्रकार के वादे या अवलोकन करने की ज़रूरत है? –

3

फोर्कजॉइन भी ठीक काम करता है, लेकिन मैं combineLatest पसंद करूंगा क्योंकि आपको अवलोकन के अंतिम मूल्य लेने के बारे में चिंता करने की आवश्यकता नहीं है। इस तरह, जब भी उनमें से कोई भी एक नया मूल्य उत्सर्जित करता है तो आप अपडेट हो सकते हैं (उदा। आप अंतराल या कुछ प्राप्त करते हैं)।

+0

यह मेरी वर्तमान जरूरतों को पूरा नहीं करता है लेकिन मैं निश्चित रूप से जल्द ही इसका उपयोग कर रहा हूं। –

+1

वह Promise.all() के समान व्यवहार प्राप्त नहीं करता है, लेकिन यह Promise.any() – Purrell

+0

जैसा है यदि मेरे पास 2 कॉल एक रिटर्न वादा है और कोई अन्य रिटर्न देखने योग्य है तो क्या मैं उपयोगकर्ता फोर्कोज़ कर सकता हूं? या वादा.all()? या कोई नहीं, मुझे दो कार्यों को एक ही प्रकार के वादे या अवलोकन करने की ज़रूरत है? –

2

पर reactivex.ioforkJoin वास्तव में Zip, जो मेरे लिए काम किया है के लिए अंक:

let subscription = Observable.zip(obs1, obs2, ...).subscribe(...); 
संबंधित मुद्दे