Noções Básicas de EventEmitter
6 exemplos para você começar com EventEmitter - 4 básicos e 2 intermediários.
Busque em todas as páginas da documentação
6 exemplos para você começar com EventEmitter - 4 básicos e 2 intermediários.
import { EventEmitter } from 'node:events'.Registre listeners e emita eventos nomeados de forma síncrona.
import { EventEmitter } from 'node:events';
const bus = new EventEmitter();
bus.on('ping', (ms: number) => console.log('pong', ms));
bus.emit('ping', 42);emit chama os listeners de forma síncrona no mesmo tick, a menos que listeners async retornem Promises que você trate separadamente.emit é true se os listeners existiam.Relacionado: Domain Events vs EventEmitter - quando usar um barramento (bus)
once para Manipuladores de Uso ÚnicoRemove automaticamente o listener após a primeira invocação.
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('ready', () => console.log('startup complete'));
emitter.emit('ready');
emitter.emit('ready'); // a segunda emissão não faz nada'open' em servidores.once envolve on com off automático - evita vazamento se o evento disparar exatamente uma vez.on com off explícito na limpeza.off / removeListenerRemova listeners quando o escopo terminar.
import { EventEmitter } from 'node:events';
const bus = new EventEmitter();
function handler(payload: string) {
console.log(payload);
}
bus.on('job', handler);
bus.off('job', handler);off - funções anônimas não podem ser removidas sem removeAllListeners.AbortSignal para limpeza agrupada (veja a página de vazamentos de memória).emitter.setMaxListenersAumente o limite quando muitos listeners forem intencionais.
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.setMaxListeners(50);MaxListenersExceededWarning - sinaliza um possível vazamento.getMaxListeners() lê a configuração atual.Relacionado: Vazamentos de Memória de Listeners - padrões de vazamento
Listeners async retornam Promises que emit não aguarda.
import { EventEmitter } from 'node:events';
const bus = new EventEmitter();
bus.on('work', async () => {
await Promise.resolve();
console.log('done');
});
bus.emit('work');
console.log('emit returned');
// emit returned, then donetry/catch internamente.events.on com cuidado.Eventos type-safe em TypeScript - padrões completos em uma página dedicada.
import { EventEmitter } from 'node:events';
type Events = {
userCreated: [userId: string];
error: [err: Error];
};
class TypedBus extends EventEmitter {
emit<E extends keyof Events>(event: E, ...args: Events[E]): boolean {
return super.emit(event, ...args);
}
on<E extends keyof Events>(event: E, listener: (...args: Events[E]) => void): this {
return super.on(event, listener);
}
}Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026