gpt4 book ai didi

javascript - 如何将 bacon.js 中一个流的当前值与另一个流的每个值组合起来?

转载 作者:行者123 更新时间:2023-11-28 01:38:02 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个状态对象 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()

我做错了什么,我可以做得更好吗?

最佳答案

如果我理解正确的话,您希望将 mutationStream 中的每个新值与 state 的当前值组合起来,但您不希望在 mutationStream 时触发更新>状态改变(导致“反馈”效果)。 sampledBy 组合器允许使用这样做:

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

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

关于javascript - 如何将 bacon.js 中一个流的当前值与另一个流的每个值组合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21261052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com