Назад к вопросам
Middle
163
questionbank

Что вы знаете о классе EventEmitter в Node.js?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

EventEmitter - класс в Node.js, который лежит в основе многих встроенных модулей (например, http, fs), и используется для реализации событийной модели.

Основные возможности:

  • Подписка на события: Позволяет регистрировать функции (обработчики), которые будут выполняться при возникновении определенного события.
  • Эмиссия событий: Позволяет вызывать (эмитировать) события, запуская зарегистрированные обработчики.
  • Передача данных: При эмиссии события можно передавать любые данные обработчикам.

Основные методы:

  • emitter.on(eventName, listener): Добавляет обработчик listener для события eventName.
  • emitter.once(eventName, listener): Добавляет одноразовый обработчик listener для события eventName. Он будет вызван только один раз при первом срабатывании события.
  • emitter.emit(eventName[, ...args]): Вызывает всех обработчиков, зарегистрированных для события eventName, передавая им аргументы ...args.
  • emitter.removeListener(eventName, listener): Удаляет конкретный обработчик listener для события eventName.
  • emitter.removeAllListeners([eventName]): Удаляет все обработчики для события eventName. Если eventName не указан, удаляет всех обработчиков для всех событий.

Пример использования:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on('event', (a, b) => {
  console.log('событие произошло!', a, b);
});

myEmitter.emit('event', 'аргумент а', 'аргумент б'); // Выведет: событие произошло! аргумент а аргумент б

EventEmitter реализует паттерн "Наблюдатель". Это позволяет строить слабосвязанные системы, где компоненты взаимодействуют через события, не зная о внутренней реализации друг друга.