Skip to content

Latest commit

 

History

History
64 lines (42 loc) · 1.92 KB

30.node_event_emitter.md

File metadata and controls

64 lines (42 loc) · 1.92 KB

Node.js Event emitter

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