Conceptos básicos de EventEmitter
6 ejemplos para empezar con EventEmitter: 4 básicos y 2 intermedios.
Busca en todas las páginas de la documentación
6 ejemplos para empezar con EventEmitter: 4 básicos y 2 intermedios.
import { EventEmitter } from 'node:events'.Registra listeners y emite eventos con nombre 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 llama a los listeners de forma síncrona en el mismo tick, a menos que los listeners async devuelvan Promesas que manejes por separado.emit es true si existían listeners.Relacionado: Eventos de dominio vs EventEmitter - cuándo usar un bus
Elimina automáticamente el listener después de la primera invocación.
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('ready', () => console.log('startup complete'));
emitter.emit('ready');
emitter.emit('ready'); // la segunda emisión no hace nada'open' en servidores.once envuelve on con off automático, evita fugas si el evento se dispara exactamente una vez.on con off explícito en la limpieza.Elimina listeners cuando el ámbito termina.
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; las funciones anónimas no se pueden eliminar sin removeAllListeners.AbortSignal para la limpieza agrupada (ver la página de fugas de memoria).Aumenta el límite cuando muchos listeners son intencionales.
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.setMaxListeners(50);MaxListenersExceededWarning, lo que indica una posible fuga.getMaxListeners() lee la configuración actual.Relacionado: Fugas de memoria de los listeners - patrones de fuga
Los listeners async devuelven Promesas que emit no espera.
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 doneevents.on con cuidado.Eventos con tipo seguro en TypeScript: patrones completos en una 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);
}
}Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026