我需要进行几个相互依赖的异步调用。我最初编写代码并使用Promise.all
分步制作async
。我遍历了我的数据并创建了一个async
方法,以便将所有需要的操作放入一个数组中以传递到Promise.all()
。这工作正常,但我怎么能使用Observables做同样的事情。我已经读过forkJoin
相当于Promise.all
,但是我怎样才能遍历数据并包装我的async
函数,然后在移动到下一个{{}}之前执行它{1}}?
flatMap
答案 0 :(得分:0)
我认为你想要的是这样的
Rx.Observable.of({ itemIds: [1, 2, 3, 4, 5 ]})
.mergeMap(response => {
const promises = response.itemIds
.map(id => {
return new Promise((resolve, reject) => {
// Wait for some random time, then resolve the promise.
const timeout = Math.floor(Math.random() * 5000);
setTimeout(() => {
console.log(`Finished promise ${id}`); // debug only
resolve({id, resolved: true})
}, timeout);
});
});
// Wait until all Promises have been resolved, then return all
// of them in a single and ordered array.
return Rx.Observable.forkJoin(promises);
})
.subscribe(x => console.log(x));
请注意,promises以任意顺序解析,但以正确的顺序返回。 jsbin示例中的注释代码还显示每个promise可以单独解析并合并回原始流,以防promises的顺序不重要。