प्रत्येक एक अलग उद्देश्य प्रदान करता है इसलिए उनकी तुलना करना मुश्किल है।
सामान्य तौर पर अगर आप इस स्रोत ले:
let source = Observable.range(1,3);
और subscribe()
साथ में उपभोग unsubscribe()
द्वारा तुरंत बाद:
source.subscribe(
val => console.log(val),
undefined,
() => console.log('complete')
).unsubscribe();
तो स्रोत से सभी मूल्यों हालांकि मैं भी उत्सर्जित हो जा रहे हैं सब्सक्राइब करने के ठीक बाद unsubscribe()
कहा जाता है। ऐसा इसलिए है क्योंकि कोड अभी भी सख्ती से अनुक्रमिक है और source
एक ठंडा अवलोकन योग्य है।
1
2
3
complete
Btw, source.delay(0).subscribe(...).unsubscribe()
बनाने के लिए और देखो क्या होता है करने के लिए .delay(0)
ऑपरेटर जोड़ने का प्रयास करें। यह वास्तविक setTimout()
कॉल का उपयोग कर ग्राहक कॉलबैक एसिंक्रोनस को मूल्यों को उत्सर्जित करता है और इस कारण से unsubscribe()
कॉलबैक तक पहुंचने से पहले इसे कॉल किया जाता है और तत्काल त्याग दिया जाता है क्योंकि हमने पहले ही सदस्यता समाप्त कर दी है।
दूसरे शब्दों में unsubscribe()
चलिए आप किसी भी समय मूल्य प्राप्त करना बंद कर देते हैं। यहां तक कि जब स्रोत ने सभी मानों को उत्सर्जित नहीं किया है (हम कभी भी पूर्ण कॉल प्राप्त नहीं करते हैं)।
take()
ऑपरेटर का उपयोग करके चेन को केवल विशिष्ट मानों को उत्सर्जित करने के लिए सीमित किया जाता है।
source.take(1).subscribe(
val => console.log(val),
undefined,
() => console.log('complete')
);
इसमें केवल एक मूल्य का उत्सर्जन करता है और पूरे करता है:
1
complete
भले ही आप .unsubscribe()
जोड़ा परिणाम ही होगा। https://jsbin.com/copujo/4/edit?js,console
तो take()
एक ऑपरेटर observables चेनिंग जबकि unsubscribe()
Subscription
वस्तु पर एक विधि है:
लाइव डेमो देखें। ये दो चीजें अक्सर अदला-बदली होती हैं लेकिन मुझे लगता है कि वे कभी भी एक दूसरे को पूरी तरह से प्रतिस्थापित नहीं करते हैं।
'var subscription = observable.subscribe ({function A})। सदस्यता रद्द करें(); 'अपेक्षित मज़ेदार के रूप में काम नहीं करेगा, इस पंक्ति को उत्साहित करने के बाद ए को बुलाया जाएगा। तो केवल एक मान प्राप्त करने के लिए, आपको शून्य मान मिलेगा। इसे मैन्युअल रूप से सब्सक्राइब करने के लिए अनुशंसा की जाती है और आपके लिए सदस्यता के साथ सौदे लेने जैसे अन्य तरीकों का उपयोग करें (..) या अन्य विधियों का उपयोग करें। –