【问题标题】:Produce a stream of values with data-driven delays in RxJS在 RxJS 中生成具有数据驱动延迟的值流
【发布时间】:2017-01-12 17:17:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您的问题文本说消息应该被返回(发出?)并且它应该然后等待相应的时间量,但是代码中的消息表明应该等待发生此消息被传递之前。它是哪一个?是从订阅时间还是发出上一条消息的时间算起?
  • 请原谅我的术语,我是 RxJS 的新手。是的,我的意思是发射。我可以看到有关时序参数的混乱。在这种情况下,接受的答案可以满足我的要求。

标签: rxjs rxjs5


【解决方案1】:

你可以使用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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 2021-01-30
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    相关资源
    最近更新 更多