El emisor de eventos de Node.js
Si has trabajado con JavaScript en el navegador, sabes cuánto de la interacción del usuario se maneja a través de eventos: clics del ratón, pulsaciones de teclas, reacción a los movimientos del ratón, etc.
En el lado del backend, Node.js nos ofrece la opción de construir un sistema similar utilizando el módulo events.
Este módulo, en particular, ofrece la clase EventEmitter, que usaremos para manejar nuestros eventos.
Se inicializa usando
import EventEmitter from 'node:events'
const eventEmitter = new EventEmitter()
Este objeto expone, entre muchos otros, los métodos on
y emit
.
emit
se usa para activar un eventoon
se usa para agregar una función de devolución de llamada que se ejecutará cuando se active el evento
Por ejemplo, creemos un evento start
, y como muestra, reaccionamos a eso simplemente registrando en la consola:
eventEmitter.on('start', () => {
console.log('started')
})
Cuando ejecutamos
eventEmitter.emit('start')
se activa la función del manejador de eventos, y obtenemos el registro de la consola.
Puedes pasar argumentos al manejador de eventos pasándolos como argumentos adicionales a emit()
:
eventEmitter.on('start', number => {
console.log(`started ${number}`)
})
eventEmitter.emit('start', 23)
Múltiples argumentos:
eventEmitter.on('start', (start, end) => {
console.log(`started from ${start} to ${end}`)
})
eventEmitter.emit('start', 1, 100)
El objeto EventEmitter también expone varios otros métodos para interactuar con los eventos, como
once()
: agregar un oyente de una sola vezremoveListener()
/off()
: eliminar un oyente de eventos de un eventoremoveAllListeners()
: eliminar todos los oyentes de un evento
Puedes leer más sobre estos métodos en la documentación del módulo events.