2016-11-20 31 views
27

, onComplete और onErrorsubscribe का कार्य पारस्परिक रूप से अनन्य है।सदस्यता लें

या तो onError या onComplete घटनाएं मेरे subscribe में आग लग जाएंगी।
मेरे पास एक तर्क ब्लॉक है जिसे निष्पादित करने की आवश्यकता है कि मुझे कोई त्रुटि मिलती है, या मैं सफलतापूर्वक जानकारी का भाप समाप्त करता हूं।

मैंने finally in python जैसे कुछ के लिए देखा, लेकिन मुझे मिला finally जो मुझे देखने योग्य देखने के लिए संलग्न होना चाहिए।

लेकिन मैं केवल उस तर्क को करना चाहता हूं जब मैं सदस्यता लेता हूं, और स्ट्रीम समाप्त होने के बाद, सफलतापूर्वक या त्रुटि के साथ।

कोई विचार?

उत्तर

40

मुझे लगता है कि finally() ऑपरेटर वास्तव में सही है। आप कहते हैं कि:

केवल उस तर्क करते हैं जब मैं सदस्यता, और धारा के बाद

समाप्त हो गया है जो एक समस्या मुझे लगता है कि नहीं है। यदि आप चाहें तो सदस्यता लेने से पहले आपके पास source हो सकता है और finally() का उपयोग कर सकते हैं। इस तरह से आप हमेशा उपयोग finally() करने की आवश्यकता नहीं:

let source = Observable.create(observer => { 
    observer.next(1); 
    observer.error('error message'); 
    observer.next(3); 
    observer.complete(); 
}).publish(); 

source 
    .finally(() => console.log('Finally callback')) 
    .subscribe(
    value => console.log('#1 Next:', value), 
    error => console.log('#1 Error:', error), 
    () => console.log('#1 Complete') 
); 

source 
    .subscribe(
    value => console.log('#2 Next:', value), 
    error => console.log('#2 Error:', error), 
    () => console.log('#2 Complete') 
); 

source.connect(); 

यह प्रिंट सांत्वना देने:

#1 Next: 1 
#2 Next: 1 
#1 Error: error message 
Finally callback 
#2 Error: error message 
+0

अजीब बात है मैं उस पर नहीं लगता था, धन्यवाद –

+0

.finally() मेरे लिए काम करता । धन्यवाद। – STEEL

+1

दिलचस्प है कि यह वादे के विपरीत पैटर्न का प्रकार है, जिसमें 'अंत में) विधि को पहले जोड़ा गया है, और सदस्यता अनिवार्य रूप से पास/विफल हो जाती है। – BradGreens

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