EventEmitter es una clase en node.js que es responsable de manejar los eventos creados usando el módulo ‘eventos’ en node.js. Los eventos se crean para realizar operaciones personalizadas mientras se realiza un conjunto de operaciones. EventEmitter puede devolver dos propiedades, a saber, newListener si queremos crear un nuevo detector de eventos y removeListener cuando queremos eliminar los detectores de eventos existentes. Ambas propiedades mencionadas emiten un evento cada vez que se les llama para realizar la operación.
Para realizar operaciones en EventEmitter, necesitamos crear una referencia usando el módulo de ‘eventos’ y luego necesitamos inicializar una instancia de EventEmitter para que podamos usarla más.
Sintaxis:
// Creating a constant reference of EventEmitter const EventEmittter = require('events'); // Initializing instance of EventEmitter var emitter = new EventEmitter();
Creación de un evento de escucha usando addListener: Antes de emitir un evento, debemos crear un oyente que escuchará las devoluciones de llamada emitidas, luego el oyente procederá con las acciones adicionales que se requieren para cumplir con el evento. Podemos crear un detector de eventos con la ayuda de la propiedad addListener de EventEmitter. addListener agrega el evento al final de la array para que podamos llamarlo varias veces para llamar a varias instancias del evento y es muy útil ya que no necesitamos escribir un evento varias veces.
Sintaxis:
emitter.addListener(eventName, listener);
Evento de emisión: como cada evento es un evento con nombre en node.js, podemos desenstringr un evento usando el método de emisión y podemos pasar argumentos arbitrarios para escuchar en el evento.
Sintaxis:
emitter.emit(eventName, arg1,arg2,...)
Ejemplo: Código para crear un EventEmitter y agregar eventos usando el método addListener.
Javascript
// Importing the events module const EventEmitter = require('events'); // Initializing instance of EventEmitter to be used var emitter = new EventEmitter(); // Adding listener to the event emitter.addListener('welcomeEvent', (name) => { console.log("welcome " + name); }); // Emitting the welcomeEvent emitter.emit('myEvent', "Geek");
Producción:
welcome Geek
Eliminar una instancia de un evento: Podemos eliminar un evento usando dos métodos removeListener si queremos eliminar un oyente específico del evento o removeAllListeners si queremos eliminar una instancia de todos los oyentes de un evento.
Sintaxis:
// For removing any single listener form the event emitter.removeListener(eventName, listener) // For removing all listeners of the event emitter.removeAllListeners(eventName)
Ejemplo: código para eliminar el detector de eventos de un evento.
Javascript
// Importing the events module const EventEmitter = require('events'); // Initializing instance of EventEmitter to be used var emitter = new EventEmitter(); // Creating events var robot1 = (msg) => { console.log("Message from person1: " + msg); }; var person2 = (msg) => { console.log("Message from person2: " + msg); }; // Registering person1 and person2 with the printEvent emitter.addListener('printEvent', person1); emitter.addListener('printEvent', person2); // Triggering the created event emitter.emit('printEvent', "Event occurred"); // Removing all the listeners associated with the event emitter.removeAllListeners('printEvent'); // Triggering the event again but no output // as all listeners are removed emitter.emit('printEvent', "Event occurred");
Producción:
Message from person1: Event occurred Message from person2: Event occurred
Como puede ver en el evento de salida anterior, se activó dos veces, pero la salida se produjo solo una vez, ya que eliminamos los detectores de eventos, por lo que no había detectores presentes mientras se emitía el evento por segunda vez.