我正在学习 RxJS 和 Angular 2。假设我有一个承诺链,其中包含多个异步函数调用,这些调用依赖于前一个调用的结果,它看起来像:
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);
});
它产生与 Promise 链相同的输出。我的问题是:
我做得对吗?是否有任何 RxJS 相关的改进可以应用到上面的代码中?
如何使这个可观察链重复执行?即使在末尾添加另一个订阅也只会产生额外的 6,但我期望它打印出 1、3 和 6。
observableChain.subscribe((finalResult) => { console.log(finalResult); });
observableChain.subscribe((finalResult) => { console.log(finalResult); });
1 3 6 6