我正在学习RxJS和Angular2。比方说,我有一个带有多个异步函数调用的promise链,这取决于前一个的结果,如下所示:
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