Я хочу, чтобы один или несколько файлов генерировали события и несколько других файлов для его прослушивания. Они должны иметь один и тот же экземпляр. Это то, что я пытался сделатьNode.js: Совместное использование объекта между несколькими файлами
Для проверки кода, у меня есть 3 файла
eventEmitter.js
- это создает новый объектEventEmitter
и экспортирует егоeventGenerator.js
- это выделяет события с помощьюemitEvent.js
listenEvent.js
- это слушает события, используяemitEvent.js
Я использую require
в eventGenerator.js
и listenEvent.s
и экспортируя объект в 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
. Почему это происходит?
Я пропустил что-то тривиальное здесь?
Заранее благодарен!