EventEmitter в Node.js
Если вы работали с JavaScript в браузере, то знаете, какая часть взаимодействия с пользователем обрабатывается через события: щелчки мыши, нажатия кнопок клавиатуры, реакция на движения мыши и так далее.
На стороне бэкенда Node.js предлагает нам возможность построить аналогичную систему, используя модуль events.
Этот модуль, в частности, предоставляет класс EventEmitter, который мы будем использовать для обработки наших событий.
Инициализируется он следующим образом:
import EventEmitter from 'node:events';
const eventEmitter = new EventEmitter();Этот объект предоставляет, среди прочих, методы on и emit.
emitиспользуется для запуска событияonиспользуется для добавления функции обратного вызова, которая будет выполнена при запуске события
Например, давайте создадим событие start и, в качестве примера, отреагируем на него, просто выводя в консоль:
eventEmitter.on('start', () => {
console.log('started');
});Когда мы запускаем
eventEmitter.emit('start');функция обработчика событий запускается, и мы получаем вывод в консоль.
Вы можете передавать аргументы обработчику событий, передавая их в качестве дополнительных аргументов в emit():
eventEmitter.on('start', number => {
console.log(`started ${number}`);
});
eventEmitter.emit('start', 23);Несколько аргументов:
eventEmitter.on('start', (start, end) => {
console.log(`started from ${start} to ${end}`);
});
eventEmitter.emit('start', 1, 100);Объект EventEmitter также предоставляет несколько других методов для взаимодействия с событиями, таких как
once(): добавить одноразовый слушательremoveListener()/off(): удалить слушателя события из событияremoveAllListeners(): удалить все слушатели для события
Вы можете прочитать больше об этих методах в документации по модулю events.