एक समान दिखने वाले उत्तर को नीचा दिखाया गया। लेकिन मुझे लगता है कि मैं सीमित मामलों के लिए यहां जो कुछ भी सुझा रहा हूं, मैं उसे सही ठहरा सकता हूं।
हालांकि यह सच है कि एक अवलोकन योग्य वर्तमान मूल्य नहीं है , बहुत बार यह तुरंत उपलब्ध मूल्य होगा। उदाहरण के लिए, redux / flux / akita स्टोर्स के साथ आप कई वेधशालाओं के आधार पर एक केंद्रीय स्टोर से डेटा का अनुरोध कर सकते हैं और यह मान आमतौर पर तुरंत उपलब्ध होगा।
यदि ऐसा है तो जब आप subscribe
, मान तुरंत वापस आ जाएगा।
तो मान लें कि आपके पास एक सेवा के लिए एक कॉल था, और पूरा होने पर आप अपने स्टोर से किसी चीज़ का नवीनतम मूल्य प्राप्त करना चाहते हैं, जो संभवतः नहीं निकल सकता है :
आप ऐसा करने की कोशिश कर सकते हैं (और जितना संभव हो आप चीजों को 'पाइप के अंदर' रखें):
serviceCallResponse$.pipe(withLatestFrom(store$.select(x => x.customer)))
.subscribe(([ serviceCallResponse, customer] => {
// we have serviceCallResponse and customer
});
इसके साथ समस्या यह है कि यह तब तक अवरुद्ध रहेगा जब तक कि माध्यमिक पर्यवेक्षित मूल्य का उत्सर्जन नहीं करता है, जो संभवतः कभी भी नहीं हो सकता है।
मैंने पाया कि हाल ही में एक अवलोकनीय का मूल्यांकन करने की आवश्यकता है यदि केवल एक मूल्य तुरंत उपलब्ध था , और इससे भी महत्वपूर्ण बात यह है कि मुझे यह पता लगाने में सक्षम होना चाहिए कि क्या नहीं था। मैंने यह करना समाप्त कर दिया:
serviceCallResponse$.pipe()
.subscribe(serviceCallResponse => {
// immediately try to subscribe to get the 'available' value
// note: immediately unsubscribe afterward to 'cancel' if needed
let customer = undefined;
// whatever the secondary observable is
const secondary$ = store$.select(x => x.customer);
// subscribe to it, and assign to closure scope
sub = secondary$.pipe(take(1)).subscribe(_customer => customer = _customer);
sub.unsubscribe();
// if there's a delay or customer isn't available the value won't have been set before we get here
if (customer === undefined)
{
// handle, or ignore as needed
return throwError('Customer was not immediately available');
}
});
ध्यान दें कि उपरोक्त सभी के लिए मैं subscribe
मान प्राप्त करने के लिए उपयोग कर रहा हूँ (जैसा कि @ चर्चा करता है)। एक .value
संपत्ति का उपयोग नहीं , भले ही मैं एक था BehaviorSubject
।