Что такое EventEmitter и как он работает?
Основы Node.js
EventEmitter — базовый класс Node.js для публикации и подписки на события; на нём построены потоки, HTTP-сервер и многое другое.
Основные методы
on(event, listener)— подписаться.once(event, listener)— один раз.emit(event, ...args)— вызвать все обработчики синхронно в порядке подписки.off(event, listener)— отписаться.
import { EventEmitter } from 'node:events';
class Job extends EventEmitter {
run() {
this.emit('start');
this.emit('done', { ok: true });
}
}
const job = new Job();
job.on('done', (result) => console.log(result));
job.run();Особенности
emitсинхронный: обработчики выполняются сразу, внутри вызова.- Событие
errorособенное: без подписчикаemit('error')выбросит исключение и может уронить процесс. - Больше 10 подписчиков на одно событие даёт предупреждение о возможной утечке; забытые
onвнутри функций приводят к росту памяти.
Коротко для собеседования
EventEmitter — шина событий. Он синхронный, требует отписки от лишних слушателей и обязывает вешать обработчик на error.