Если вы работали с JavaScript в браузере, то знаете, какая большая часть взаимодействия с пользователем обрабатывается через события: клики мышью, нажатия клавиш, реакция на движения мыши и так далее.
На стороне бэкенда Node.js даёт нам возможность построить похожую систему с помощью модуля events.
Этот модуль, в частности, предоставляет класс EventEmitter, который мы будем использовать для обработки наших событий.
Инициализируется он так:
const EventEmitter = require('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(): удалить все слушатели события
Подробнее об этих методах можно почитать в официальной документации.