El emisor de eventos de nodo

Cómo trabajar con eventos personalizados en Node

Si trabajó con JavaScript en el navegador, sabrá qué parte de la interacción del usuario se maneja a través de eventos: clics del mouse, pulsaciones de botones del teclado, reacción a los movimientos del mouse, etc.

En el lado del backend, Node nos ofrece la opción de construir un sistema similar usando eleventsmódulo.

Este módulo, en particular, ofrece laEventEmitterclass, que usaremos para manejar nuestros eventos.

Inicializa un objeto EventEmitter usando esta sintaxis:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

Este objeto expone, entre muchos otros, elonyemitmétodos.

  • emitse utiliza para desencadenar un evento
  • onse usa para agregar una función de devolución de llamada que se ejecutará cuando se active el evento

Emite y escucha eventos

Por ejemplo, creemos unstartevento, y como una cuestión de proporcionar una muestra, reaccionamos a eso simplemente iniciando sesión en la consola:

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

Cuando corremos

eventEmitter.emit('start')

se activa la función del controlador de eventos y obtenemos el registro de la consola.

addListener()es un alias paraon(), en caso de que veas que se usa.

Pasando argumentos al evento

Puede pasar argumentos al controlador de eventos pasándolos como argumentos adicionales aemit():

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)

Escuche un evento solo una vez

El objeto EventEmitter también expone elonce()método, que puede utilizar para crear un detector de eventos de una sola vez.

Una vez que se activa ese evento, el oyente deja de escuchar.

Ejemplo:

eventEmitter.once('start', () => {
  console.log(`started!`)
})

eventEmitter.emit(‘start’) eventEmitter.emit(‘start’) //not going to fire

Eliminar un detector de eventos

Una vez que crea un detector de eventos, puede eliminarlo usando elremoveListener()método.

Para hacerlo, primero debemos tener una referencia a la función de devolución de llamada deon.

En este ejemplo:

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

Extraiga la devolución de llamada:

const callback = () => {
  console.log('started')
}

eventEmitter.on(‘start’, callback)

Para que luego puedas llamar

eventEmitter.removeListener('start', callback)

También puede eliminar todos los oyentes a la vez en un evento, usando:

eventEmitter.removeAllListeners('start')

Registrar los eventos

loseventNames()El método, llamado en una instancia de objeto EventEmitter, devuelve una matriz de cadenas que representan los eventos registrados en el EventListener actual:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

eventEmitter.on(‘start’, () => { console.log(‘started’) })

eventEmitter.eventNames() // [ ‘start’ ]

listenerCount()devuelve el recuento de oyentes del evento pasado como parámetro:

eventEmitter.listenerCount('start') //1

Agregar más oyentes antes / después de otros

Si tiene varios oyentes, el orden de ellos puede ser importante.

Una instancia de objeto EventEmitter ofrece algunos métodos para trabajar con orden.

emitter.prependListener()

Cuando agrega un oyente usandoonoaddListener, se agrega en último lugar en la cola de oyentes y se llama en último lugar. UsandoprependListenerse agrega y se llama antes que otros oyentes.

emitter.prependOnceListener()

Cuando agrega un oyente usandoonce, se agrega en último lugar en la cola de oyentes y se llama en último lugar. UsandoprependOnceListenerse agrega y se llama antes que otros oyentes.

Descarga mi gratisManual de Node.js


Más tutoriales de nodos: