एक नमूदार कि .share() ऑपरेटर का उपयोग किया जाता है (बैकएंड में महंगा गणना के कारण) पर async पाइप का उपयोग कर, मैं इस व्यवहार पर ठोकर खाई:कोणीय 2 + rxjs: साथ .share() ऑपरेटर async पाइप
data$ = (new Observable(observer => {
let counter=0;
observer.next(counter)
window.setInterval(() => {
observer.next(counter);
counter++;
}, 2000);
}))
.share();
टेम्पलेट:
{{ (data$|async) !== null }}
{{ (data$|async) !== null }}
प्रारंभिक मूल्य का उत्पादन होता है:
true false
निम्नलिखित आउटपुट (2 सेकंड से अधिक के बाद) हैं:
true true
जो व्यवहार मैं पहले मूल्य के लिए भी अपेक्षा करता हूं। यदि मैं .share() को छोड़ देता हूं, तो पहले मान के लिए आउटपुट "सत्य सत्य" है, जैसा कि मैं अपेक्षा करता हूं। मुझे लगता है कि ऊपर दिया गया व्यवहार इस तथ्य के कारण है कि टेम्पलेट में पहली अभिव्यक्ति देखने योग्य निष्पादन को ट्रिगर करती है, और एक बार दूसरी एसिंक पाइप अवलोकन करने योग्य हो जाती है, तो डेटा पहले से ही चला गया है। क्या यह स्पष्टीकरण सही है? और मैं इस व्यवहार से कैसे बच सकता हूं?
होना चाहिए के बाद से वहाँ एक भी मूल्य माना जाता है, यह 'observer.next है (...); observer.complete() '। – estus
एक मूल्य के साथ उदाहरण केवल प्रदर्शन के लिए था, मेरे ऐप में देखने योग्य के पास कई मान – highwaychile
है, कृपया उस कोड को प्रदान करें जो आपके मामले को प्रतिबिंबित करता है। – estus