RxJS构建连续API调用链的方式



如果我处理一个任意数组,这些数组的值必须映射到承诺,并且在执行下一个调用之前等待上一个调用完成是至关重要的,我通常遵循以下模式:

const later = ms => 
new Promise(resolve => 
setTimeout(_ => resolve(console.log(ms)), ms));
console.log('chain start')
let chain = Promise.resolve();
[1, 2, 3, ...].forEach(val => 
chain = chain.then(later.bind(null, val * 100)))
chain.then(_ => console.log('chain end'))

这里重要的部分是 1 - 我们不知道数组可以携带多少项,2 - 我们不能使用Promise.all(需要连续调用或队列(。

问题是: 最好的 RxJS 方法是什么?所以,观察量而不是承诺。

(我知道.toPromise(

假设所有数组都包含 [urls]

from([url1,url2,url3...]).pipe(concatMap(url=>defer(()=>fetch(url))))
.subscribe(results=console.log(results))

最新更新