Skip to content

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

js
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 evento
  • on 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:

js
eventEmitter.on('start', () => {
  console.log('started')
})

Cuando ejecutamos

js
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():

js
eventEmitter.on('start', number => {
  console.log(`started ${number}`)
})
eventEmitter.emit('start', 23)

Múltiples argumentos:

js
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 vez
  • removeListener() / off(): eliminar un oyente de eventos de un evento
  • removeAllListeners(): eliminar todos los oyentes de un evento

Puedes leer más sobre estos métodos en la documentación del módulo events.