我在我的节点App中的某个模块中创建了事件,我想在其他模块中捕获此事件,我尝试以下哪些不起作用
举起活动的模块
EventEmitter = require("events").EventEmitter;
function updatePort(port) {
...
var ee = new EventEmitter();
ee.emit("AppDef");
}
现在我想在不同的模块中捕获此事件并将某些内容打印到控制台
EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();
ee.on("AppDef", function () {
console.log('Port is defiend ' + port);
})
我认为问题出在new
我做了两次但不确定如何克服这个问题......
答案 0 :(得分:1)
问题是,您正在创建两个不同的EventEmitter
实例,并且您正在从一个实例发出并在另一个实例中侦听该事件。
要解决此问题,您需要在模块之间共享相同的EventEmitter
实例
第1单元
var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();
function updatePort(port) {
...
// emit the port as well
ee.emit("AppDef", port);
}
// export the EventEmitter instance
module.exports.ee = ee;
第2单元
var mod1 = require('./module1');
// Attach the listener on the EventEmitter instance exported by module1
mod1.ee.on('AppDef', function(port) {
console.log('Port is defined ' + port);
});