Я хочу, чтобы console.log печатал от 0 до 9, и на каждом шаге выполнялось только одно обещание lazy.

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

Этот код приводит к тому, что обещание регистрируется, и все обещания запускаются одновременно ...

1
Justin Thomas 25 Ноя 2018 в 19:59

1 ответ

Лучший ответ

Используйте оператор concatMap вместо map, он позволяет последовательно проецировать наблюдаемый источник один за другим.

Rx.Observable.range(0,10)
    .concatMap((i)=>new Promise((res,rej)=>setTimeout(()=>res(i),Math.random()*100)))
    .subscribe(console.log,console.error)
2
Meme Composer 25 Ноя 2018 в 17:05