假设我的代码中有一个任意值:
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/

10-13 06:07