moo*_*ede 2 events timed rxjs rxjs5
我有一些预先定义的事件设置为在特定时间发生.我有一个计时器,像这样:
const timer = Rx.Observable.interval(100).timeInterval()
.map(x => x.interval)
.scan((ms, total) => total + ms, 0)
Run Code Online (Sandbox Code Playgroud)
计时器发出接近100,200,300,400,500的东西(虽然实际上它更像是101,200,302,401,500 ......这完全没问题)我也有一些我想在某些时候做的事情.例如,假设我想在以下时间做某些事情:
const stuff = Rx.Observable.from([1000, 2000, 2250, 3000, 5000]);
Run Code Online (Sandbox Code Playgroud)
我想要的是将"stuff"和"timer"组合在一起,使得结果流每次在"stuff"中定义一次值(或者稍晚一点).在这种情况下,这将是t = 1000毫秒,2000毫秒,2250毫秒,3000毫秒和5000毫秒.注意:由于间隔大小,2250人应该在2300左右发射.没关系.他们不能早到或不止一次.
我有一个解决方案,但它不是很好.它重新启动"东西"每一步(在这种情况下每100毫秒)并过滤它并采取1.我希望,一旦从"东西"发出一个事件,它就会消失,所以后续过滤器它没有那些价值观.
在真正的应用程序中,会有东西和东西2,也许东西3 ...(但我会称之为别的东西!)
提前致谢!我希望这很清楚.
如果我已经理解了你正确的事情,这应该可以通过一个简单的投影来实现:
const times$ = stuff.flatMap(x => Rx.Observable.timer(x));
Run Code Online (Sandbox Code Playgroud)
这是一个工作样本:https://jsbin.com/negiyizibu/edit?html,js,console,output
编辑
对于第二个要求,尝试这样的事情:
const times$ = Rx.Observable
.from([{"val":"jeff", "t": 1000}, {"val":"fred", "t": 2500}])
.flatMap(x => Rx.Observable.timer(x.t).map(y => x.val));
Run Code Online (Sandbox Code Playgroud)
https://jsbin.com/cegijudoci/edit?js,console,output
归档时间: |
|
查看次数: |
1140 次 |
最近记录: |