Я учусь RxJS и Угловое 2. Допустим, у меня есть обещание цепь с несколькими вызовами функции асинхронной, которые зависят от предыдущего своего результата, который выглядит следующим образом:Chaining Наблюдаемые в 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);
});
Мои попытки делать те же исключительно с использованием RxJS без использования обещаний производится следующим образом:
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);
});
Это дает тот же результат, что и обещание цепи. Мои вопросы:
Имею ли я это право? Есть ли какие-либо улучшения, связанные с RxJS, которые я могу внести в код выше
Как получить эту наблюдаемую цепочку для повторного выполнения? т.е. Добавление другого подписку в конце концов просто производит дополнительный 6 хотя я ожидать, что это напечатать 1, 3 и 6.
observableChain.subscribe ((finalResult) => { console.log (finalResult); });
наблюдаемыйChain.subscribe ((finalResult) => { console.log (finalResult); });