在 RxJS 中生成具有数据驱动延迟的值流

Produce a stream of values with data-driven delays in RxJS

给定一个包含消息有效负载和时间参数的对象数组,如下所示:

var data = [ { message:"Deliver me after 1000ms", time:1000 }, { message:"Deliver me after 2000ms", time:2000 }, { message:"Deliver me after 3000ms", time:3000 } ];

我想创建一个可观察序列,其中 returns 数组每个元素的消息部分,然后等待对象中指定的相应时间量。如果有必要,我愿意重组数组的数据结构。

我见过 Observable.delay 但看不出它如何以这种方式与动态值一起使用。我在 RxJS 5 中工作。

您可以使用 delayWhen:

var data = [
    { message:"Deliver me after 1000ms", time:1000 },
    { message:"Deliver me after 2000ms", time:2000 },
    { message:"Deliver me after 3000ms", time:3000 }
];

Rx.Observable
  .from(data)
  .delayWhen(datum => Rx.Observable.timer(datum.time))
  .do(datum => console.log(datum.message))
  .subscribe();
<script src="https://unpkg.com/@reactivex/rxjs@5.0.3/dist/global/Rx.js"></script>