Skip to content

O emissor de eventos do Node.js

Se você trabalhou com JavaScript no navegador, sabe o quanto da interação do usuário é manipulada por meio de eventos: cliques do mouse, pressionamentos de teclas, reações a movimentos do mouse e assim por diante.

No lado do backend, o Node.js nos oferece a opção de construir um sistema semelhante usando o módulo events.

Este módulo, em particular, oferece a classe EventEmitter, que usaremos para lidar com nossos eventos.

Você inicializa isso usando

javascript
import EventEmitter from 'node:events'
const eventEmitter = new EventEmitter()

Este objeto expõe, entre muitos outros, os métodos on e emit.

  • emit é usado para disparar um evento
  • on é usado para adicionar uma função de callback que será executada quando o evento for disparado

Por exemplo, vamos criar um evento start, e como forma de fornecer um exemplo, reagimos a isso apenas registrando no console:

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

Quando executamos

javascript
eventEmitter.emit('start')

a função do manipulador de eventos é disparada e obtemos o log do console.

Você pode passar argumentos para o manipulador de eventos passando-os como argumentos adicionais para emit():

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

Múltiplos argumentos:

javascript
eventEmitter.on('start', (start, end) => {
  console.log(`started from ${start} to ${end}`)
})
eventEmitter.emit('start', 1, 100)

O objeto EventEmitter também expõe vários outros métodos para interagir com eventos, como

  • once(): adicionar um ouvinte único
  • removeListener() / off(): remover um ouvinte de evento de um evento
  • removeAllListeners(): remover todos os ouvintes de um evento

Você pode ler mais sobre esses métodos na documentação do módulo events.