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