2

我想在 node.js 中使用一个事件来执行一些代码;我的问题是,调用的事件代码的范围是什么?具体来说,它是共享事件调用者的范围,还是“孤立”的?我知道我可以将参数传递给事件调用的代码以实现类似的效果,但理想情况下我希望调用范围可用。

4

2 回答 2

4

该事件与调用者的范围相关联。即从模块导出的EventEmitter,只能用于侦听从同一个EventEmitter 发出的事件。

Nodejs EventEmitter - 定义侦听器函数的范围

于 2012-11-06T18:43:22.583 回答
2

当您发出一个事件时,您将其放入队列中,稍后由节点事件系统处理。发出事件的范围内的任何变量都必须emit作为参数传递。当节点接受该事件并触发所有绑定的回调时,这会在不同的“干净”范围和不同的“干净”堆栈下发生。(旁注,这就是为什么节点中的堆栈跟踪可能会妨碍调试)。

var events = require('events');

var myEmitter = new events.EventEmitter();

function closure1(word, number) {
  function closure2(animal, vegetable) {
    myEmitter.emit('hey', word, number, animal, vegetable, 43);
  }
  closure2("horse", "carrot");
}

myEmitter.on('hey', function (word, number, animal, vegetable, anotherNumber) {
  console.log('hey event fired with', word, number, animal, vegetable, anotherNumber);
});
closure1("table", 42);

当你运行它时,它会打印“嘿,用表 42 马胡萝卜 43 触发的事件”。

请参阅emitter.emit(event, [arg1], [arg2], [...] 上的 node.js 文档

于 2012-11-06T18:59:31.400 回答