tutorial react property nodejs node new event emitter driven javascript node.js eventemitter

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.