¿Qué es EventEmitter en Node.js?

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. 

Publicación traducida automáticamente

Artículo escrito por maddler y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *