2016-11-02 9 views
8

अनिवार्य रूप से, शीर्षक क्या कहता है, क्या http कॉल करने के प्रयोजनों के लिए observable over a promise का उपयोग करने का कोई कारण है? अनावश्यक अधूरापन की तरह लगता है, क्योंकि सभी कॉल सफल होंगे या विफल हो जाएंगे, और इसे रद्द करने का कोई वास्तविक कारण नहीं है, वस्तुतः कभी भी। ठेठ उपयोग-मामले के लिए यह पूछना, सामान्य अवलोकनों के लिए डिबॉन्स की बिक्री-पिच (जो, विडंबना यह है कि, बेकार कॉल किए बिना, ठीक है, एनजी-डिबॉन्स ठीक है)।एंगुलर 2 में एचटीपी के लिए वादे बनाम पर्यवेक्षक?

+0

और हमारे पास अधिक सब्सक्राइबर होने पर दोहराए गए http कॉल को न भूलें - कोई अवलोकन करने योग्य हो सकता है, जिसका अर्थ है अधिक बॉयलरप्लेट। –

+0

सबसे स्पष्ट कारण यह है कि एचटीपी अवलोकन का उपयोग करता है और वादे नहीं करता है। यह कम से कम प्रयास का मार्ग है। – estus

+0

https://groups.google.com/forum/#!topic/angular-data-dev/AdULPprCkbI –

उत्तर

7

अवलोकनों का एक बड़ा लाभ है जो यहां काफी प्रासंगिक है।

Observable रद्दीकरण का समर्थन करता है जबकि Promise नहीं करता है।

subscribe() और map() का उपयोग then() के बजाय मुझे बहुत जटिलता प्रतीत नहीं होता है। यदि आप की जरूरत है तो Promise प्राप्त करने के लिए आप toPromise() का भी उपयोग कर सकते हैं।

अधिक जानकारी के लिए Angular - Promise vs Observable भी देखें।

यदि प्रोग्रामिंग की एफआरपी शैली का उपयोग किया जाता है तो यह हर जगह एक देखने योग्य है। यदि यह वांछित नहीं है तो toPromise() का उपयोग करके Promise और थोड़ा सरल API प्रदान करता है।

+3

सहमत हैं, लेकिन एक बार जब आप स्ट्रीम की सदस्यता लेते हैं तो आप संकल्प के बाद व्यवहार जोड़ने के लिए किसी भी async फ़ंक्शन को चेन नहीं कर सकते हैं। मेरे दिमाग में, देखने योग्य एचटीएमएल कॉल के लिए सबसे अच्छा विकल्प नहीं हैं, जब वे एक साधारण वादा पर्याप्त होते हैं और उन्हें जंजीर बनाया जा सकता है, तो वे बॉयलरप्लेट निर्माण का कारण बनते हैं। – Polochon

+0

बस सदस्यता लें ('' 'के बजाय' map() 'का उपयोग करें। आप 'toromromise()' का भी उपयोग कर सकते हैं और फिर आपको '()' मिलता है। अवलोकन के साथ आप 'वादा' के साथ बस सबकुछ प्राप्त करते हैं, आपको केवल कोई उल्लेखनीय लाभ (आईएमएचओ) के लिए भाग नहीं मिलते हैं। –

+1

[पुनः प्रयास] (https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/retry.md) द्वारा कुछ लचीलापन में भी निर्माण विफल विफलता बहुत आसान है। – JayChase

3

वचन और पर्यवेक्षण के बीच बहुत ही बुनियादी अंतर है यदि कोई कार्यक्षमता सदस्यता नहीं लेती है तो अवलोकन योग्य मॉड्यूल काम नहीं करेगा। इसलिए आपके सर्वर पर कम बोझ।

जहां वचन में है, चाहे आप वास्तव में प्रतिक्रिया का उपयोग कर रहे हों या नहीं, यह आपके अनुरोध और पेलोड के साथ आपके सर्वर को पिंग करने के बाद आपको एक वादा वस्तु भेजेगा; जो कभी-कभी अवांछनीय है।

फंडा नोड या अन्य सर्वर के भार को कम करना है।

+1

प्रतिक्रिया के बिना आप किस कोण में एक कोणीय http कॉल सेट अप कर रहे हैं? इससे मुझे कोई समझ नहीं आती है। मैं आलसी लोडिंग को समझता हूं, लेकिन यह कैसे लागू नहीं है। कठोर होने की कोशिश नहीं कर रहे हैं, बस वास्तव में नहीं देखते हैं कि लोग इसे तर्क के रूप में क्यों लाते हैं। – VSO

+2

इसका मतलब यह नहीं है कि अनुरोध भेजा जाएगा लेकिन प्रतिक्रिया को अनदेखा किया जाएगा। आपके पास विभिन्न विधियों की एक श्रृंखला हो सकती है जो 'मानचित्र() ',' फ़िल्टर() ',' replay() ',' flatMap() 'और whatnot के साथ देखने योग्य नहीं बनाते हैं, लेकिन आप किसी भी कारण से निर्णय ले सकते हैं कि आप जब कुछ शर्त पूरी हो जाती है तो अनुरोध बिल्कुल या कभी-कभी अनुरोध करना नहीं चाहता। यह एक एसक्यूएल क्वेरी की तरह है कि आप पहले से तैयार और निर्माण कर सकते हैं और केवल मांग या बार-बार भेज सकते हैं। –

+0

यदि दो मान्य ग्राहक इसकी सदस्यता लेते हैं - यह दो बार काम करेगा, और जब तक आपको वास्तव में इसकी आवश्यकता नहीं होती है तब तक यह कॉल को स्थगित कर देगा। –