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.