【发布时间】:2018-04-11 15:16:16
【问题描述】:
我刚刚阅读了这个 SO 问题 RxJS Promise Composition (passing data) 并有一个问题。
设置同前述问题:我有3个promise。
const p1 = () => Promise.resolve(1);
const p2 = x => { const val = x + 1; return Promise.resolve(val); };
const p3 = x => {
const isEven = x => x % 2 === 0;
return Promise.resolve(isEven(x));
};
根据答案,我将它们链接起来,如下所示:
var chainedPromises$ =
Rx.Observable.just()
.flatMap(p1)
.flatMap(p2)
.flatMap(p3);
但是,chainedPromises$ 仅在所有 Promise 链的末尾触发一次,解析值为 true。即:
chainedPromises$.subscribe(function(x){console.log(x)}); // Logs `true`
如何更改 chainedPromises$ 使其在每个承诺结束时触发一次?即:
chainedPromises$.subscribe(function(x){console.log(x)});
// Logs `1`
// Logs `2`
// Logs `true`
【问题讨论】:
-
Observable 和 Promises 不是一回事,您在这里尝试做的事情没有意义。如果您要让 Oserable 返回多个结果,那么您可以使用
next将它们关闭
标签: javascript promise rxjs observable