使用 Bacon.js 发出事件

Emitting events with Bacon.js

我正在学习 Bacon.js,我对应该如何发出事件感到很困惑。

我这里有一个关于 node.js

事件的超级简单示例
var events = require('events')
var eventEmitter = new events.EventEmitter()

eventEmitter.on("add", function(data){
  console.log(data+1)
  return data+1
})

eventEmitter.emit('add', 5)
eventEmitter.emit('add', 3)

setTimeout(function(){
  eventEmitter.emit('add', 13)
}, 1000)

setTimeout(function(){
  eventEmitter.emit('add', 10)
}, 3000)

我找不到一个例子来说明如何使用 BaconJS 和节点来完成像这样简单的事情。

我试过这个:

var add = Bacon.fromEvent(eventEmitter, "add")

add.onValue(function(data){
  return data+1
})

add.map(5)
add.map(3)
add.map(13)
add.map(10)

你需要 Bacon Bus。您只需将数据推送到总线,而不是发出事件。

如果您想使用 NodeJS 发射器,您的代码可能如下所示:

var add = Bacon.fromEvent(eventEmitter, "add")

// every time we get an event we add 1 to its' value
add.map(function(data){
  return data+1
}).onValue(function(data){
  console.log(data)
})
eventEmitter.emit('add',10)

请注意,您必须将 .onValue 附加到 add.map() 的结果。否则控制台将仅输出事件流中的原始值。 map 创建一个新的、修改过的流。

如果您对地图的工作原理感到有点困惑,

BaconJS Snake example 可能会有用。