假设我的代码中有一个任意值:
var randomValue = null;
我的代码中有多个位置可以更改此值。我可以创建一个基于此值的更改的EventStream吗?换句话说,如果任意值被更改,则将新值作为EventStream发送给订阅者?
最佳答案
使用Bus
而不是普通值:
var arbitraryValueBus = Bacon.Bus()
现在,您可以使用
Bus.push
设置值:arbitraryValueBus.push(newValue)
您可以通过订阅
Bus
来监听值的更改:arbitraryValueBus.forEach(newValue => console.log(newValue))
请注意,使用简单的
Bus
,您的订户将不会获得在forEach
调用之前设置的值。因此,如果要添加“当前值”,并使用当前值立即调用回调,则应使用Property
:var b = Bacon.Bus()
var p = arbitraryValueBus.toProperty()
p.forEach() // to make sure it's updated before adding subscribers
b.push("first value")
p.subscribe(x => console.log(x))
==> outputs "first value"
现在,您的订阅者将立即获得当前值(如果有)。
关于javascript - Bacon.js EventStream的值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38172243/