Se você trabalhou com JavaScript no navegador, sabe o quanto da interação do usuário é tratada por meio de eventos: cliques do mouse, pressionamentos de botões do teclado, reação aos movimentos do mouse e assim por diante.
No 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:
const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
Este objeto expõe, entre muitos outros, os métodos on
e emit
.
emit
é usado para adicionar um evento.on
é usado para adicionar uma função de callback que será executada quando o evvento for acionado.
Por exemplo, vamos criar um evento start
e, para fornecer uma amostra, reagimos a isso apenas logando no console:
eventEmitter.on('start', () => {
console.log('started');
});
Quando nós executamos
eventEmitter.emit('start');
a função do manipulador de eventos é acionada e obtemos o log do console.
Você pode passar argumentos para o manipulador de eventos passando-os como argumentos adicionais para emit()
:
eventEmitter.on('start', number => {
console.log(`started ${number}`);
});
eventEmitter.emit('start', 23);
Múltiplos 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 vários outros métodos para interagir com eventos, como:
once()
adiciona um listener único;removeListener()
/off()
: remove um event listener de um evento;removeAllListeners()
: remove todos os listeners de um evento;
Você pode ler todos os detalhes na página do módulo events
em https://nodejs.org/api/events.html