我想在node.js中使用一个事件来执行一些代码;我的问题是,调用的事件代码的范围是什么?具体来说,它是否共享事件调用者的范围,还是“孤立”?我知道我可以将参数传递给在事件上调用的代码以实现类似的效果,但理想情况下我希望调用范围可用。
答案 0 :(得分:3)
该事件与调用者的范围有关。即从模块导出的EventEmitter,只能用于侦听从同一EventEmitter发出的事件。
答案 1 :(得分:1)
发出事件时,将其放入队列中以便稍后由节点事件系统处理。必须将发出事件的作用域中的任何变量作为参数传递给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发射的嘿事件”。
see the node.js docs on emitter.emit(event, [arg1], [arg2], [...]