【发布时间】:2014-01-21 14:35:07
【问题描述】:
在我的应用程序中,我有一个状态对象state,它被 GUI 元素改变了。每次改变这个状态时,都会执行一个 XHR 来更新服务器端的状态并返回当前状态。这很好地映射到 Bacon.js 的流。
现在,假设一个突变流mutationEventStream,我正在尝试通过将先前的状态值与事件触发器组合来更新我的状态:
Bacon.onValues(state, mutationEventStream, function(data, event) {
dataUpdateBus.push(/* extract data from event */)
})
(dataUpdateBus包含所有需要去服务器的数据更新。state是由dataUpdateBus上的数据发起的XHR返回的)
我现在的问题是我需要一个当前状态值来正确更新它。如果我有一个全局变量,我只需要 mutationEventStream 上的新事件,但是对于流,我需要混合我的 state 流。使用上面的代码,我得到了state 的每次更新,即数据更新实际上是一个无限循环(dataUpdateBus.push -> XHR -> state -> dataUpdateBus.push 等)。而且由于state 的更新频率比mutationEventStream 更频繁,所以我不能使用Bacon.zip()。
我做错了什么,我可以做得更好?
【问题讨论】:
标签: javascript reactive-programming bacon.js