javascript - react - node js event emitter class
¿Cómo compartes un EventEmitter en node.js? (3)
Quiero emitir eventos desde un archivo / módulo / script y escucharlos en otro archivo / módulo / script. ¿Cómo puedo compartir la variable del emisor entre ellos sin contaminar el espacio de nombres global?
¡Gracias!
¿Por qué no usar el EventEmitter del objeto de proceso global?
process.on(''customEvent'', function(data) {
...
});
process.emit(''customEvent'', data);
Pro: puede deshabilitar o eliminar completamente un módulo (por ejemplo, un rastreador), sin eliminar todo su código de seguimiento dentro de sus rutas. Estoy haciendo exactamente eso para el node-trackable .
Contras: ahora no, pero por favor avíseme si ve un problema aquí ;-)
@srquinn es correcto, debe usar una instancia única compartida:
eventBus.js:
const EventEmitter = require(''events'');
const emitter = new EventEmitter();
emitter.on(''uncaughtException'', function (err) {
console.error(err);
});
module.exports = emitter;
Uso:
var bus = require(''../path/to/eventBus'');
// Register event listener
bus.on(''eventName'', function () {
console.log(''triggered!'');
});
// Trigger the event somewhere else
bus.emit(''eventName'');
Puede pasar argumentos para requerir llamadas por lo tanto:
var myModule = require(''myModule'')(Events)
Y luego en "myModule"
module.exports = function(Events) {
// Set up Event listeners here
}
Dicho esto, si desea compartir un emisor de eventos, cree un objeto emisor y luego pase a su "archivo / módulo / script" en una llamada obligatoria.
Actualizar:
Aunque correcto, este es un olor a código, ya que ahora está acoplando los módulos entre sí. En su lugar, considere usar un bus de eventos centralizado que se pueda requerir en cada módulo.