我有数量不等的承诺,我想按顺序执行它们,并以上一个承诺的结果作为下一个的参数。目前,我设法合并它们以便按顺序执行它们:

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);

07-24 17:24