我在理解 Node.js 中事件的应用时遇到了一些困难。考虑以下标准自定义 EventEmitter 实现:
var EventEmitter = require('events').EventEmitter;
var util = require('util');
function SimpleEE() {
var self = this;
self.val = false;
EventEmitter.call(this);
}
util.inherits(SimpleEE, EventEmitter);
SimpleEE.prototype.changeVal = function() {
self.val = !self.val;
self.emit('valChanged', self.val);
}
SimpleEE.on('valChanged', function(newVal) {
console.log('val was changed to ' + newVal);
});
在这种情况下,我不认为拥有监听器有什么意义。假设您希望每次事件发生时都执行相同的操作,为什么不使用监听器的回调函数来代替 emit()
调用呢?
这让我感到困惑的原因是因为我最初认为事件是为了跨模块通信;即,当另一个模块中发生适当的操作时,一个模块将收到警报。但是,根据我的理解,发射器和监听器必须注册在同一个 EventEmitter 实例下才能工作。
感谢您帮助我理解。
最佳答案
如果你想使用跨模块,你应该导出你的类,并在外部创建它的实例。例如
module.exports = SimpleEE
外面
SimpleEE = require("yourModule")
var instance = new SimpleEE()
instance.on("valChanged",function(){})
instance.changeVal("22");
或者创建一个 singleTone 以便导出创建的实例
module.exports = new SimpleEE()
外部
SimpleEE = require("yourModule")
SimpleEE.on("valChanged",function(){})
SimpleEE.changeVal("22");
您可以在这里查看How do you share an EventEmitter in node.js?获取有关触发和监听全局事件的信息
关于javascript - Node.js 事件应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860873/