Я изучаю RxJS и Angular 2. Скажем, у меня есть цепочка обещаний с несколькими вызовами функции async, которые зависят от предыдущего результата, который выглядит так:
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 без использования promises вызвали следующее:
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); });
observableChain.subscribe((finalResult) = > { console.log(finalResult); });
1 3 6 6