【发布时间】:2017-05-29 08:55:40
【问题描述】:
我希望一个或多个文件发出事件,并希望有多个其他文件来监听它。他们应该共享同一个实例。这就是我试图做的
为了测试代码,我有 3 个文件
-
eventEmitter.js- 这会创建一个新的EventEmitter对象并将其导出 -
eventGenerator.js- 这使用emitEvent.js发出事件 -
listenEvent.js- 使用emitEvent.js监听事件
我在eventGenerator.js 和listenEvent.js 中使用require 并在eventEmitter.js 中导出对象,我希望它遵循单例模式并且它们共享相同的实例。
这里有一些资源我在发布之前检查过。 免责声明:我已经从这些文件中改编了一些设计/代码进行测试。
- node.js event listener in another source file
- Singleton pattern in nodejs - is it needed?
- node.js eventEmitter : Listen for events across files
- Node event emitter in other modules
这是三个文件。
eventEmitter.js
//eventEmitter.js
var events = require('events');
var em = new events.EventEmitter();
module.exports.universalEmitter = em;
eventGenerator.js
//eventGenerator.js
var eventEMitter = require('./eventEmitter.js');
var universalEmitter = eventEmitter.universalEmitter;
setInterval(function () {
universalEmitter.emit('Hello');
console.log("emitting event\n");
}, 3000);
listenEvent.js
//listenEvent.js
var eventEmitter = require('./eventEmitter.js');
var universalEmitter = eventEmitter.universalEmitter;
universalEmitter.on('Hello',function(){
console.log('received hello\n');
});
问题
-
listenEvent.js没有收到事件并立即退出。 - 如果我在同一个文件上发出和收听,它工作正常。
- 看起来
listenEvent.js和eventGenerator.js有不同的em对象实例。为什么会这样?
我在这里错过了一些琐碎的事情吗?
提前致谢!
【问题讨论】:
标签: node.js design-patterns event-handling eventemitter