繁体   English   中英

如何在bacon.js中将流的当前值与另一个流的每个值合并?

[英]How can I combine a current value of a stream with each value of another stream in bacon.js?

在我的应用程序中,我有一个状态对象state ,它由GUI元素突变。 每次更改此状态时,都会执行XHR以更新服务器端的状态,并返回当前状态。 这很好地映射到Bacon.js的流。

现在,假设有一个突变流mutationEventStream ,我试图通过结合先前的状态值和事件触发器来更新状态:

Bacon.onValues(state, mutationEventStream, function(data, event) {
    dataUpdateBus.push(/* extract data from event */)
})

dataUpdateBus包含需要去服务器的所有数据更新。 state是XHR返回的内容,该XHR以dataUpdateBus上的数据启动)

我的问题是,现在我需要一个当前状态值来正确更新它。 如果我有一个全局变量,则只需要在mutationEventStream上添加新事件,而对于流,则需要混合我的state流。 有了上面的代码我得到的每一个更新的state ,即与数据更新它的有效无限循环( dataUpdateBus.push - > XHR - > state - > dataUpdateBus.push等)。 而且由于state的更新频率比mutationEventStream更新频率高,所以我不能使用Bacon.zip()

我做错了什么,我能做得更好?

如果我理解正确,您想将mutationStream中的每个新值与state的当前值结合起来,但是您不希望在状态更改时触发更新(这会导致“反馈”效果)。 sampledBy组合器允许执行以下操作:

var stateUpdates = state.sampledBy(mutationStream, function(currentState, newEvent) {
  return currentState.updatedWith(newEvent)
}).onValue(dataUpdateBus.push)

您的代码的主要区别在于,更新仅在mutationStream中的新事件上生成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM