Я хочу генерировать события из одного файла/модуля/скрипта и слушать их в другом файле/модуле/скрипте. Как я могу разделить переменную эмиттера между ними, не загрязняя глобальное пространство имен?
Спасибо!
Я хочу генерировать события из одного файла/модуля/скрипта и слушать их в другом файле/модуле/скрипте. Как я могу разделить переменную эмиттера между ними, не загрязняя глобальное пространство имен?
Спасибо!
Вы можете передавать аргументы для требуемых вызовов следующим образом:
var myModule = require('myModule')(Events)
А потом в моем модуле
module.exports = function(Events) {
// Set up Event listeners here
}
С учетом сказанного, если вы хотите поделиться эмиттером событий, создайте объект эмиттера, а затем перейдите к вашему файлу/модулю/скрипту в вызове require.
Хотя это и правильно, это запах кода, так как теперь вы тесно связываете модули вместе. Вместо этого рассмотрите возможность использования централизованной шины событий, которая может потребоваться в каждом модуле.
emitters
, который предоставляет файл exports.variable = new EventEmitter()
. Оба файла require
этого emitters
модуля, и могут передавать события через variable
.
- person fancy; 19.05.2012
@srquinn верен, вы должны использовать общий экземпляр:
eventBus.js:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('uncaughtException', function (err) {
console.error(err);
});
module.exports = emitter;
Использование:
var bus = require('../path/to/eventBus');
// Register event listener
bus.on('eventName', function () {
console.log('triggered!');
});
// Trigger the event somewhere else
bus.emit('eventName');
Почему бы не использовать EventEmitter глобального объекта процесса?
process.on('customEvent', function(data) {
...
});
process.emit('customEvent', data);
За: вы можете отключить или полностью удалить модуль (например, трекер), не удаляя весь ваш код отслеживания в ваших маршрутах. Я делаю именно это для node-trackable.
Минусы: сейчас нет, но, пожалуйста, дайте мне знать, если увидите здесь подвох ;-)
Domain
в ядре узла немного созреет.
- person srquinn; 07.11.2014