2015-02-03 8 views
44

पर ऑब्जर्वर का "वर्तमान" मान कैसे प्राप्त करें मुझे आरएक्सजे के एक विशेष भाग को गड़बड़ाने में कठिनाई हो रही है: जब आप एक पर्यवेक्षक की सदस्यता लेते हैं, तो आप केवल भविष्य की घटनाओं की सदस्यता ले रहे हैं उस स्ट्रीम से। वादे से तुलना करें, जहां, अगर वादा हल हो गया है, तो आप उस मूल्य को प्राप्त करेंगे जब आप then() पर कॉल करते हैं।सब्सक्राइब-टाइम

यहाँ एक कोड उदाहरण है:

var subject = new Rx.Subject(); 
 

 
subject.onNext('old value'); 
 
subject.onNext('before subscription'); 
 

 
subject.subscribe(function(val) { 
 
    document.write(val); 
 
}); 
 

 
subject.onNext('after subscription');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>

मैं देखना दोनों "सदस्यता से पहले" और "सदस्यता के बाद" मुद्रित उम्मीद होती है, हालांकि यह मेरे लिए समझ में आता है कि "पुराने मूल्य" गिरा दिया जाएगा। लेकिन ऐसा लगता है कि आरएक्सजे इस तरह से काम नहीं करते हैं (केवल "सदस्यता के बाद" मुद्रित किया जाता है)। परिणाम के बाद मैं परिणाम कैसे प्राप्त कर सकता हूं?

उत्तर

79

आरएक्स दोनों व्यवहार (साथ ही अन्य) प्रदान करता है।

different Rx Subjects उपलब्ध आप अलग अलग तरीकों से observables व्यवहार करते हैं कर सकते हैं का पता लगाने कर सकते हैं:

  • Rx.Subject फायर-एंड-भूल विविधता सबसे बुनियादी है - यदि आप सदस्य नहीं बने थे जब घटना हुआ है, तो आप इसे नहीं देखते हैं।

  • उपयोग Subject के बजाय new Rx.BehaviorSubject(undefined) और आप व्यवहार आप के लिए देख रहे थे, के बाद से एक BehaviorSubject एक का प्रतिनिधित्व करता है "मान बदल सकते हैं" हो

  • उपयोग new Rx.ReplaySubject(5) और आप जितनी जल्दी 5 सबसे हाल के मूल्यों मिल जाएगा आप सदस्यता के रूप में

  • उपयोग new Rx.AsyncSubject() और आप कुछ नहीं मिलेगा जब तक नमूदार पूरा करता उस समय आपके पास अंतिम मूल्य मिल जाएगा (और अंतिम मूल्य मिलना जारी रहता है, तो आप फिर से सदस्यता)। यह वादे के वास्तविक आरएक्स एनालॉग है, क्योंकि यह "हल" (यानी पूरा करता है) तक कुछ भी नहीं पैदा करता है, और बाद में हमेशा सदस्यता लेने वाले किसी भी व्यक्ति को मूल्य देता है।

+10

"हालांकि अनुभवी आरएक्स डेवलपर को शायद ही कभी विषय बनाने की आवश्यकता है" - इसका मतलब क्या है, क्या कहीं कहीं मैं उस पर अधिक जानकारी प्राप्त कर सकता हूं? –

+10

@ बेनगेल ज्यादातर मामलों में जहां डेवलपर सोचता है कि उन्हें विषय बनाने की आवश्यकता है, डेवलपर मौजूदा आरएक्सजे विधि को पुनर्निर्मित कर रहा है जो पहले से मौजूद है, चाहे वह एक अवलोकन करने वाला कारखाना है जो एक एसिंक्रोनस ऑपरेशन को लपेटता है, या कुछ प्रकार के एसिंक स्ट्रीम हेरफेर। हर बार नहीं। कभी-कभी विषय बिल्कुल वही होता है जो आपको चाहिए। लेकिन लाइब्रेरी में नए डेवलपर्स विषय को देखते हैं और इसके लिए पहले पहुंचते हैं क्योंकि यह परिचित लग रहा है और कठिन समय है क्योंकि उन्हें यह नहीं पता कि वे जो करने की कोशिश कर रहे हैं, वे पहले से ही लागू हो चुके हैं। – Brandon

+0

@ ब्रैंडन विषय और देर से थोड़ी दूर है, लेकिन क्या आप यह भी समझा सकते हैं "जैसे अनुभवी वादे डेवलपर को शायद ही कभी वादा करने की ज़रूरत है"? मैं हर समय ऐसा करता हूं, और यदि वादे के साथ बातचीत करने का एक बेहतर तरीका है, तो मैं इसे सीखना चाहता हूं। – ReactingToAngularVues