woman holding nodejs sticker Uso de canales de eventos en Node.js

Uso de canales de eventos en Node.js

woman holding nodejs sticker Uso de canales de eventos en Node.js

Los remitentes de eventos son objetos en NodeJS que desencadenan eventos al enviar un mensaje para indicar que se ha llevado a cabo una acción.


Node.js ofrece un módulo de eventos integrado. Incluye una clase de remitente de eventos que le permite crear y manejar eventos personalizados a través de funciones de devolución de llamada.

Aquí aprenderá cómo transmitir eventos, escuchar y manejar datos de eventos y manejar errores de eventos en NodeJS.


Transmitir eventos

El módulo de eventos es una parte central del entorno del servidor Node.js. Así que no necesita instalarlo, pero antes de instalar el EventEmitter clase, necesita importar desde el módulo de eventos e instanciarlo.

Al igual que:

const EventEmitter = require("events");

const myEmitter = new EventEmitter();

Puede transmitir eventos con el EventEmitter‘s expulsar método. los expulsar método toma un nombre del evento y cualquier número de argumentos como parámetros.

Una vez que tengas la expulsar método, envía el pasado nombre del evento. Luego llama sincrónicamente a todos los detectores de eventos en el orden en que los registró, pasando los argumentos especificados a cada uno. Finalmente regresa DÓNDE si el evento tuviera oyentes y falso si no tuviera oyentes.

Por ejemplo:

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

Pasaste el bloque de código de arriba Evento de prueba como el nombre del evento, y «fu»«bar1y 2 como los argumentos. Cuando se ejecuta el bloque de código anterior, matará a todos los oyentes que escuchan el Evento de prueba evento. Convocará a esos oyentes con los argumentos dados.

Escuchar eventos

Puede escuchar transmisiones de eventos con el EventEmitter‘s En método. los En método toma un Nombre del evento y una función de devolución de llamada como parámetros. Cuando el evento con el Nombre del evento pasado en el En se transmite, llama a su función de devolución de llamada. Este método devuelve una referencia a la EventEmitterpara que pueda vincular varias llamadas.

Por ejemplo:


myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
}); 

myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
console.log(`Event emitted with the following arguments: ${args}`);
}); 

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

En el bloque de código anterior, cuando el Evento de prueba evento, los detectores de eventos llamarán a sus funciones de devolución de llamada. Los oyentes responderán en el orden en que los registró, lo que significa que la devolución de llamada del «primer oyente» ocurrirá antes que el segundo, y así sucesivamente.

Puede cambiar este comportamiento con el EventEmitter‘s prependListener método. Este método tiene los mismos parámetros que el En método. La diferencia es que este método es el primero en responder al evento, independientemente de cuándo lo registres.

Por ejemplo:

myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});
myEmitter.prependListener("TestEvent", () => {
console.log("Executes first")
})

// console.log(myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

Cuando se ejecuta el bloque de código anterior, «Se ejecuta primero» se registra primero en la consola, seguido de «TestEvent Emitted!!!» independientemente del orden en que los haya registrado debido a la prependListener método.

Si registra varios oyentes con el prependListener método, se ejecutarán en orden del último al primero.

Preste atención a la posición de la estación y los oyentes. Los oyentes siempre vienen por la estación. Esta configuración se debe a que los oyentes deben escuchar el evento antes de que la estación lo transmita.

Para el contexto, considere el bloque de código a continuación:

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
}); 

Si ejecuta el bloque de código anterior, no sucede nada porque en el momento en que la emisora ​​transmitió el evento, ningún oyente estaba escuchando el evento.

Escuche los eventos una vez

Dependiendo de sus requisitos, es posible que solo necesite manejar algunos eventos una vez en el ciclo de vida de su aplicación. Puedes lograr esto usando el EventEmitter‘s una vez método.

Este método tiene los mismos argumentos que el En método y funciona de la misma manera. La única diferencia es que los oyentes se han registrado en el una vez El método escucha el evento solo una vez.

Por ejemplo:

myEmitter.once("SingleEvent", () => {
console.log("Event handled once");
});
myEmitter.emit("SingleEvent"); // Event handled once
myEmitter.emit("SingleEvent"); // Ignored
myEmitter.emit("SingleEvent"); // Ignored

Si ejecuta el bloque de código, «Evento una vez manejado» se registrará en la consola solo una vez, sin importar cuántas veces el remitente envíe el evento.

Oyentes registrados en el una vez responde al evento en el orden en que los registra. Puede cambiar este comportamiento con el anteponerOnceListener método, que funciona como prependListener. La única diferencia es que los oyentes se han registrado en el una vez El método escucha el evento solo una vez.

Manejo de errores con remitentes de eventos

Debe asegurarse de manejar los errores de JavaScript correctamente, y los detectores de eventos no son una excepción. Los errores no controlados de ellos harán que el proceso de Node.js se cierre y su aplicación se bloquee.

Para manejar un evento de error, al menos uno de los detectores de eventos debe estar Nombre del evento ajustado a error.

Por ejemplo:

myEmitter.on("error", (error) => {
console.error(`Error: ${error}`);
});

Si un oyente maneja un error potencial, como en el bloque de código anterior, la aplicación no se bloqueará cuando ocurra un error.

Por ejemplo:

myEmitter.emit("error", new Error("This is an error"));

Ejecutar el bloque de código anterior registrará «Esto es un error» en la consola mientras un oyente maneja los eventos de error.

Administrar detectores de eventos

los EventEmitter La clase tiene varios métodos que le permiten manipular y administrar los detectores de eventos. Puede obtener los oyentes de un evento, eliminarlos y establecer el número máximo de oyentes para un evento.

Aquí hay una tabla con: EventEmitter métodos que le permiten manipular detectores de eventos con:

MétodoArgumentosvalor de beneficio
recuento de oyentesnombre del eventoDevuelve el número de oyentes suscritos a un evento.
oyentesnombre del eventoDevuelve una matriz de oyentes.
eliminarEscucharnombre del eventoElimina al menos un agente de escucha de un eventName especificado.
removeAllListenersnombre del eventoElimina todos los detectores de un eventName especificado. Si no especifica un nombre de evento, esta llamada de método elimina todos los detectores de EventEmitter.
establecerMaxListenersnúmeroCambia el número máximo predeterminado de oyentes por evento. Use infinito o cero para indicar un número ilimitado de oyentes. De forma predeterminada, solo puede suscribir diez oyentes a un evento.

Sólo puede llamar a estos métodos en un EventEmitter ejemplo.

Por ejemplo:

myEmitter.removeListener("TestEvent");

El bloque de código anterior elimina un solo oyente para el Evento de prueba evento.

La importancia de los transmisores de eventos

Node.js aplica el paradigma de programación impulsada por eventos con su soporte para emisores y oyentes de eventos. La programación basada en eventos es una de las razones por las que los programas de Node.js son más rápidos y sencillos que algunas alternativas. Puede sincronizar fácilmente varios eventos, lo que mejora la eficiencia.

Su Calificación Nos Ayuda a Mejorar