我正在使用BaconJS创建两个事件流,如下所示:
# Wait for start of the module
sStart = Bacon.fromCallback module.onStart.bind(module)
# Watch game ticks
sTick = Bacon.fromEventTarget emitter, 'tick'
# Combine it to do something
Bacon.onValues sStart, sTick, ->
# Do something on each tick, but only when module has been started
我想用它来进行同步。一旦模块启动,它应该开始监听滴答,而不是更快。它几乎可以工作,但是对于在模块启动之前发出的所有过去的滴答而不是仅仅是最近的滴答,都会调用回调。比我想要为每个后续刻度调用回调。
我几乎从FRP开始,可能有一些优雅的方式来处理它,但我现在还没有看到它。有什么想法吗?
答案 0 :(得分:3)
您可以使用此处的skipUntil
跳过值。
startE = Bacon.fromCallback module.onStart.bind(module)
tickE = Bacon.fromEventTarget emitter, 'tick'
tickE.skipUntil(startE).onValue (tickValue) -> console.log tickValue
上面的flatMap
解决方案也是有效的,但我发现skipUntil
更容易阅读。