一次在Rx中执行一个承诺

时间:2018-11-25 16:59:29

标签: javascript rxjs observable reactive-programming

我希望console.log打印0到9,并且每个步骤仅评估一个懒惰的诺言。

Rx.Observable.range(0,10)
   .map((i)=>new Promise((res,rej)=>setTimeout(()=>res(i),Math.random()*100)))
   .subscribe(console.log,console.error)

此代码将导致记录承诺,并且所有承诺同时开始...

1 个答案:

答案 0 :(得分:2)

使用concatMap运算符代替map,它可以让您逐一投影可观察的源

Rx.Observable.range(0,10)
    .concatMap((i)=>new Promise((res,rej)=>setTimeout(()=>res(i),Math.random()*100)))
    .subscribe(console.log,console.error)