uczę RxJS i kątowe 2. Załóżmy, że mam łańcuch obietnica z wielu wywołań funkcji asynchronicznych, które są uzależnione od poprzedniego w wyniku której wygląda następująco:łańcuchowym obserwabli w RxJS
var promiseChain = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 2);
}, 1000);
});
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 3);
}, 1000);
});
});
promiseChain.then((finalResult) => {
console.log(finalResult);
});
Moje próby robi te same wyłącznie przy użyciu RxJS bez użycia obietnic produkowane następujące:
var observableChain = Observable.create((observer) => {
setTimeout(() => {
observer.next(1);
observer.complete();
}, 1000);
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 2);
observer.complete()
}, 1000);
});
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 3);
observer.complete()
}, 1000);
});
});
observableChain.subscribe((finalResult) => {
console.log(finalResult);
});
To daje taki sam efekt jak w łańcuchu obietnicy. Moje pytania są następujące:
Czy robię to dobrze? Czy są jakieś ulepszenia związane z RxJS, które mogę wprowadzić w powyższym kodzie?
Jak uzyskać ten obserwowalny łańcuch, aby wykonywać go wielokrotnie? Dodawanie to kolejną subskrypcję na koniec tylko powoduje dodatkowy 6 chociaż można oczekiwać, że do drukowania 1, 3 i 6
observableChain.subscribe ((finalResult) => { console.log (finalResult) });
observableChain.subscribe ((finalResult) => { console.log (finalResult); });