使用Bacon.js发出事件

Emitting events with Bacon.js

本文关键字:出事件 js Bacon 使用      更新时间:2023-09-26

我正在学习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和node来完成这样简单的事情。

我试过这个:

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)

您需要培根巴士。您只需将数据推送到总线,而不是发出事件。

如果你想使用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示例可能会很有用。