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.