यहाँ अभी तक एक और है, लेकिन मैं अधिक सीधा और सहज महसूस करता हूं (या कम से कम प्राकृतिक अगर आप वादे के लिए उपयोग किए जाते हैं), दृष्टिकोण। मूल रूप से, आप Observable.create()
रैप करने के लिए one
और two
एक ही ऑब्जर्वेबल के रूप में एक ऑब्जर्वेबल बनाते हैं । यह Promise.all()
काम करने के तरीके के समान है ।
var first = someObservable.take(1);
var second = Observable.create((observer) => {
return first.subscribe(
function onNext(value) {
},
function onError(error) {
observer.error(error);
},
function onComplete() {
someOtherObservable.take(1).subscribe(
function onNext(value) {
observer.next(value);
},
function onError(error) {
observer.error(error);
},
function onComplete() {
observer.complete();
}
);
}
);
});
तो, यहाँ क्या हो रहा है? सबसे पहले, हम एक नया ऑब्जर्वेबल बनाते हैं। इस समारोह को Observable.create()
नाम दिया गया , जिसे उपयुक्त नाम onSubscription
दिया गया है, पर्यवेक्षक (आपके द्वारा पास किए गए मापदंडों से निर्मित subscribe()
) को पारित किया जाता है , जो एक नया वादा करते समय एक ही वस्तु के समान resolve
और reject
संयुक्त होता है। इस तरह हम जादू का काम करते हैं।
में onSubscription
, हम पहले ऑब्जर्वेबल की सदस्यता लेते हैं (ऊपर के उदाहरण में, इसे कहा जाता था one
)। हम आपको कैसे संभालते हैं next
और error
आप पर निर्भर हैं, लेकिन मेरे नमूने में प्रदान की गई डिफ़ॉल्ट आम तौर पर बोलना उचित होना चाहिए। हालाँकि, जब हम complete
घटना को प्राप्त करते हैं , जिसका अर्थ है one
कि अब किया जाता है, तो हम अगले अवलोकन के लिए सदस्यता ले सकते हैं; इसके बाद दूसरा ऑब्जर्वेबल फायरिंग के बाद पहले वाला पूरा हो गया।
दूसरे प्रेक्षक के लिए प्रदान किया गया उदाहरण प्रेक्षक काफी सरल है। मूल रूप से, second
अब वह कार्य करता है जो आप two
ओपी में कार्य करने की अपेक्षा करेंगे । अधिक विशेष रूप से, (क्योंकि ) के द्वारा और उसके बाद पहले और बाद में पूर्ण होने second
वाले पहले मान का उत्सर्जन होगा, यह मानते हुए कि कोई त्रुटि नहीं है।someOtherObservable
take(1)
उदाहरण
यहाँ एक पूर्ण, कार्यशील उदाहरण है जिसे आप कॉपी / पेस्ट कर सकते हैं यदि आप मेरे उदाहरण को वास्तविक जीवन में काम करते देखना चाहते हैं:
var someObservable = Observable.from([1, 2, 3, 4, 5]);
var someOtherObservable = Observable.from([6, 7, 8, 9]);
var first = someObservable.take(1);
var second = Observable.create((observer) => {
return first.subscribe(
function onNext(value) {
observer.next(value);
},
function onError(error) {
observer.error(error);
},
function onComplete() {
someOtherObservable.take(1).subscribe(
function onNext(value) {
observer.next(value);
},
function onError(error) {
observer.error(error);
},
function onComplete() {
observer.complete();
}
);
}
);
}).subscribe(
function onNext(value) {
console.log(value);
},
function onError(error) {
console.error(error);
},
function onComplete() {
console.log("Done!");
}
);
यदि आप कंसोल देखते हैं, तो उपरोक्त उदाहरण प्रिंट होगा:
1
6
किया हुआ!