我已经读过无处不在的module.exports被缓存并在第一次调用后每次需要时返回相同的对象。
这是我的代码 -
index.js
var http= require('http');
var Customer= require('./code/Customer');
var Wishlist= require('./code/Wishlist');
var server= http.createServer(function(req,res){
console.log("Request received");
res.end("Request received");
});
server.listen(3000,function(){
console.log("hello");
});
customer.js
var emitter= require('../../lib/EventDispatcher')();
emitter.on('wishlist',function(){
console.log("Listened to wishlist event");
});
module.exports= function(){
console.log("Inside customer");
}
Wishlist.js
var emitter= require('../../lib/EventDispatcher')();
module.exports= function(){
console.log("Inside customer");
emitter.emit('wishlist');
}
EventDispatcher.js
var emitter= require('events').EventEmitter;
module.exports= function() {
console.log("created");
return new emitter();
}
如果我的eventDispatcher被缓存,那么wishlist发出的事件应该被客户捕获。但它没有发生。
我正在尝试为观察者创建一个骨干,以便每个模块都可以自己监听事件。这是正确的方法吗?
答案 0 :(得分:0)
EventDispatcher模块被缓存,但每次使用它时,您都会再次调用模块构造函数,并且构造函数每次都会创建一个新的发射器对象。因此,每次使用EventDispatcher时,您最终会得到一个新的独立发射器,因为您每次都在调用一个新的构造函数。
仅供参考,我没有看到EventDispatcher模块的重点。它包装了EventEmitter,但是没有做任何事情。调用者也可以直接创建自己的EventEmitter对象。
要获取单个全局EventEmitter对象,可以将模块更改为:
var Emitter = require('events').EventEmitter;
var sharedEmitter = new Emitter();
module.exports= function() {
console.log("created");
return sharedEmitter;
}