यहाँ अभी तक एक और है, लेकिन मैं अधिक सीधा और सहज महसूस करता हूं (या कम से कम प्राकृतिक अगर आप वादे के लिए उपयोग किए जाते हैं), दृष्टिकोण। मूल रूप से, आप 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वाले पहले मान का उत्सर्जन होगा, यह मानते हुए कि कोई त्रुटि नहीं है।someOtherObservabletake(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
किया हुआ!