Skip to content

EventEmitter в Node.js

Если вы работали с JavaScript в браузере, то знаете, какая часть взаимодействия с пользователем обрабатывается через события: щелчки мыши, нажатия кнопок клавиатуры, реакция на движения мыши и так далее.

На стороне бэкенда Node.js предлагает нам возможность построить аналогичную систему, используя модуль events.

Этот модуль, в частности, предоставляет класс EventEmitter, который мы будем использовать для обработки наших событий.

Инициализируется он следующим образом:

js
import EventEmitter from 'node:events';
const eventEmitter = new EventEmitter();

Этот объект предоставляет, среди прочих, методы on и emit.

  • emit используется для запуска события
  • on используется для добавления функции обратного вызова, которая будет выполнена при запуске события

Например, давайте создадим событие start и, в качестве примера, отреагируем на него, просто выводя в консоль:

js
eventEmitter.on('start', () => {
  console.log('started');
});

Когда мы запускаем

js
eventEmitter.emit('start');

функция обработчика событий запускается, и мы получаем вывод в консоль.

Вы можете передавать аргументы обработчику событий, передавая их в качестве дополнительных аргументов в emit():

js
eventEmitter.on('start', number => {
  console.log(`started ${number}`);
});
eventEmitter.emit('start', 23);

Несколько аргументов:

js
eventEmitter.on('start', (start, end) => {
  console.log(`started from ${start} to ${end}`);
});
eventEmitter.emit('start', 1, 100);

Объект EventEmitter также предоставляет несколько других методов для взаимодействия с событиями, таких как

  • once(): добавить одноразовый слушатель
  • removeListener() / off(): удалить слушателя события из события
  • removeAllListeners(): удалить все слушатели для события

Вы можете прочитать больше об этих методах в документации по модулю events.