我有数量不等的承诺,我想按顺序执行它们,并以上一个承诺的结果作为下一个的参数。目前,我设法合并它们以便按顺序执行它们:
const promises = [p1, p2, p3, p4, ....];
const source$ = promises.map(p => Rx.Observable.defer(p));
const combination$ = Rx.Observable.concat(...source$);
combination.subscribe((x) => console.log(x));
但是,现在我该如何设法将参数传递给每个promise?我读到可以使用concatMap。像这样的东西:
Observable.from(p1).concatMap(res => p2(res)).concatMap(res => p3(res))
我想我需要始终在concatMap内部返回一个新的Observable。以及如果多个promise应该是可变的,如何链接concatMaps?
有人可以指出正确的方向吗?我是整个反应式编程领域的新手,但是对于我已经了解的部分来说,这真是太棒了!
谢谢
最佳答案
好的,我终于有了我想要的结果
const promises = [
(i=0) => Promise.resolve(i+2),
(i=2) => Promise.resolve(i+4),
(i=2) => Promise.resolve(i+8)
];
const initial$ = Rx.Observable.from(promises[0]());
promises.reduce((o, p) => o.concatMap(p), initial$)
.subscribe(console.log);