Event emitter
Se você já trabalhou com JavaScript no browser, já sabe o quão grande é a quantidade de ações do usuário que são tratadas por eventos: clicks do mouse, teclas sendo pressionadas, movimentos do mouse, e muito mais.
No lado do backend, o Node.js nos oferece a opção de trabalhar com um sitema similar usando o módulo events
.
Esse módulo, em particular, fornece a classe EventEmitter
, que nós utilizaremos para lidar com nossos eventos.
Você a inicializa usando
const EventEmitter = require('events')const eventEmitter = new EventEmitter()
Esse objeto expõe, entre muitos outros, os métodos on
e emit
.
emit
é usado para acionar um eventoon
é usado para adicionar uma função callback que será executada quando o evento for acionado
Por exemplo, vamos criar um evento start
, e para dar uma amostra grátis, vamos reagir a ele logando no console:
eventEmitter.on('start', () => {console.log('started')})
Quando rodamos
eventEmitter.emit('start')
a função que lida com o evento é acionada, e obtemos o log.
Você pode passar argumentos à função passando-os como argumentos adicionais do emit()
:
eventEmitter.on('start', number => {console.log(`started ${number}`)})eventEmitter.emit('start', 23)
Múltipos argumentos:
eventEmitter.on('start', (start, end) => {console.log(`started from ${start} to ${end}`)})eventEmitter.emit('start', 1, 100)
O objeto EventEmitter também expõe diversos outros métodos que interagem com eventos, como
once()
: escuta o evento apenas uma vezremoveListener()
/off()
: remove um escutador (listener) de um eventoremoveAllListeners()
: remove todos escutadores (listeners) de um evento
Você pode ler o detalhe de todos eles na página do módulo events
em https://nodejs.org/api/events.html