用Bacon.js发射事件

时间:2015-04-07 22:13:41

标签: javascript node.js events frp 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)

1 个答案:

答案 0 :(得分:2)

您需要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可能会有用。