Emisor de eventos de Node.js

Node.js usa el módulo de eventos para crear y manejar eventos personalizados. La clase EventEmitter se puede usar para crear y manejar el módulo de eventos personalizados.
La sintaxis para importar el módulo de eventos se proporciona a continuación:

Sintaxis:

const EventEmitter = require('events');

Todos los EventEmitters emiten el evento newListener cuando se agregan nuevos oyentes y removeListener cuando se eliminan los oyentes existentes. También proporciona una opción más:

captura booleanaRechazos

Default Value: false
It automatically captures rejections.

Escuchar eventos: Antes de emitir cualquier evento, debe registrar funciones (callbacks) para escuchar los eventos.

Sintaxis:

eventEmitter.addListener(event, listener)
eventEmitter.on(event, listener)

eventEmitter.on(event, listener) y eventEmitter.addListener(event, listener) son bastante similares. Agrega el oyente al final de la array de oyentes para el evento especificado. Múltiples llamadas al mismo evento y oyente agregarán el oyente varias veces y, en consecuencia, se activarán varias veces. Ambas funciones devuelven emitter, por lo que las llamadas se pueden enstringr.

Emisión de eventos: cada evento se denomina evento en nodejs. Podemos desenstringr un evento mediante la función emit(event, [arg1], [arg2], […]). Podemos pasar un conjunto arbitrario de argumentos a las funciones de escucha.

Sintaxis:

eventEmitter.emit(event, [arg1], [arg2], [...])

Ejemplo:

// Importing events
const EventEmitter = require('events');
   
// Initializing event emitter instances 
var eventEmitter = new EventEmitter();
  
// Registering to myEvent 
eventEmitter.on('myEvent', (msg) => {
   console.log(msg);
});
  
// Triggering myEvent
eventEmitter.emit('myEvent', "First event");

Producción:

First event

Eliminación de Listener: eventEmitter.removeListener () toma dos eventos de argumento y listener, y elimina ese listener de la array de listeners que está suscrita a ese evento. Mientras que eventEmitter.removeAllListeners() elimina todos los oyentes de la array que están suscritos al evento mencionado.

Sintaxis:

eventEmitter.removeListener(event, listener)
eventEmitter.removeAllListeners([event])

Ejemplo:

// Importing events
const EventEmitter = require('events');
  
// Initializing event emitter instances 
var eventEmitter = new EventEmitter();
   
var geek1= (msg) => {
    console.log("Message from geek1: " + msg);
};
   
var geek2 = (msg) => {
    console.log("Message from geek2: " + msg);
};
  
// Registering geek1 and geek2
eventEmitter.on('myEvent', geek1);
eventEmitter.on('myEvent', geek1);
eventEmitter.on('myEvent', geek2);
   
// Removing listener geek1 that was
// registered on the line 13
eventEmitter.removeListener('myEvent', geek1);
   
// Triggering myEvent
eventEmitter.emit('myEvent', "Event occurred");
  
// Removing all the listeners to myEvent
eventEmitter.removeAllListeners('myEvent');
  
// Triggering myEvent
eventEmitter.emit('myEvent', "Event occurred");

Producción:

Message from geek1: Event occurred
Message from geek2: Event occurred

Registramos dos veces geek1 y una vez geek2. Para llamar a eventEmitter.removeListener(‘myEvent’, geek1) se eliminará una instancia de geek1. Finalmente, eliminando todos los oyentes usando el método removeAllListeners() que eliminará todos los oyentes de myEvent.

Eventos especiales: todas las instancias de EventEmitter emiten el evento ‘newListener’ cuando se agregan nuevos oyentes y se eliminan los oyentes existentes ‘removeListener’ .

  • Evento: ‘newListener’ La instancia de EventEmitter emitirá su propio evento ‘newListener’ antes de agregar un detector a su array interna de detectores. Los oyentes registrados para el evento ‘newListener’ pasarán al nombre del evento y la referencia al oyente que se agrega. El evento ‘newListener’ se activa antes de agregar el oyente a la array.
    eventEmitter.once( 'newListener', listener)
    eventEmitter.on( 'newListener', listener)
  • Evento: ‘removeListener’ El evento ‘removeListener’ se emite después de eliminar un oyente.
    eventEmitter.once( ‘removeListener’, listener)
    eventEmitter.on( 'removeListener’, listener)
  • Evento: ‘error’ Cuando ocurre un error dentro de una instancia de EventEmitter, la acción típica es que se emita un evento de ‘error’ . Si un EventEmitter no tiene al menos un agente de escucha registrado para el evento de «error» y se emite un evento de «error», se genera el error, se imprime un seguimiento de la pila y se cierra el proceso de Node.js.
    eventEmitter.on('error', listener)
    

Ejemplo:

// Importing events
const EventEmitter = require('events');
  
// Initializing event emitter instances 
var eventEmitter = new EventEmitter();
  
// Register to error
eventEmitter.on('error', (err) => {
    console.error('Attention! There was an error');
});
  
// Register to newListener
eventEmitter.on( 'newListener', (event, listener) => {
    console.log(`The listener is added to ${event}`);
});
  
// Register to removeListener
eventEmitter.on( 'removeListener', (event, listener) => {
    console.log(`The listener is removed from ${event}`);
});
  
// Declaring listener geek1 to myEvent1
var geek1  = (msg) => {
    console.log("Message from geek1: " + msg);
};
  
// Declaring listener geek2 to myEvent2
var geek2 = (msg) => {
    console.log("Message from geek2: " + msg);
};
  
// Listening to myEvent with geek1 and geek2
eventEmitter.on('myEvent', geek1);
eventEmitter.on('myEvent', geek2);
  
// Removing listener
eventEmitter.off('myEvent', geek1);
  
// Triggering myEvent
eventEmitter.emit('myEvent', 'Event occurred');
  
// Triggering error
eventEmitter.emit('error', new Error('Attention!'));

Producción:

The listener is added to removeListener
The listener is added to myEvent
The listener is added to myEvent
The listener is removed from myEvent
Message from geek2: Event occurred
Attention! There was an error

Referencia: https://nodejs.org/api/events.html#events_class_eventemitter

Publicación traducida automáticamente

Artículo escrito por Pragya_Chaurasia 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 *