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.