Рубрики
Без рубрики

Источник события Узла

Как работать с пользовательскими событиями в узле

Если вы работали с JavaScript в браузере, вы знаете, какая часть взаимодействия пользователя обрабатывается с помощью событий: щелчков мыши, нажатий кнопок клавиатуры, реакции на движения мыши и так далее.

На внутренней стороне Node предлагает нам возможность построить аналогичную систему с использованием модуля события .

Этот модуль, в частности, предлагает класс EventEmitter , который мы будем использовать для обработки наших событий.

Вы инициализируете объект-отправитель событий, используя этот синтаксис:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

Этот объект предоставляет, среди многих других, на и испускать методы.

  • испускать используется для запуска события
  • вкл используется для добавления функции обратного вызова, которая будет выполняться при срабатывании события

Излучать и прослушивать события

Например, давайте создадим событие start , и в качестве примера мы отреагируем на это, просто войдя в консоль:

eventEmitter.on('start', () => {
  console.log('started')
})

Когда мы бежим

eventEmitter.emit('start')

запускается функция обработчика событий, и мы получаем журнал консоли.

addListener() является псевдонимом для on() , на случай, если вы видите, что он используется.

Передача аргументов событию

Вы можете передать аргументы обработчику событий, передав их в качестве дополнительных аргументов в 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() , который можно использовать для создания одноразового прослушивателя событий.

Как только это событие запускается, прослушиватель прекращает прослушивание.

Пример:

eventEmitter.once('start', () => {
  console.log(`started!`)
})

eventEmitter.emit('start')
eventEmitter.emit('start') //not going to fire

Удаление прослушивателя событий

После создания прослушивателя событий вы можете удалить его с помощью метода removeListener() .

Для этого мы должны сначала получить ссылку на функцию обратного вызова на .

В этом примере:

eventEmitter.on('start', () => {
  console.log('started')
})

Извлечение обратного вызова:

const callback = () => {
  console.log('started')
}

eventEmitter.on('start', callback)

Так что позже ты сможешь позвонить

eventEmitter.removeListener('start', callback)

Вы также можете удалить всех прослушивателей сразу на событии, используя:

eventEmitter.removeAllListeners('start')

Регистрация событий

Метод Имена событий() , вызываемый в экземпляре объекта EventEmitter, возвращает массив строк, представляющих события, зарегистрированные в текущем списке событий:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

eventEmitter.on('start', () => {
  console.log('started')
})

eventEmitter.eventNames() // [ 'start' ]

счетчик прослушивателей() возвращает количество прослушивателей события, переданного в качестве параметра:

eventEmitter.listenerCount('start') //1

Добавление дополнительных слушателей до/после других

Если у вас несколько слушателей, их порядок может быть важен.

Экземпляр объекта EventEmitter предлагает несколько методов для работы с порядком.

эмиттер.предварительные слушатели()

При добавлении прослушивателя с помощью вкл или Добавляемый список , он добавляется последним в очередь слушателей и вызывается последним. Использование добавляющих прослушивателей он добавляется и вызывается раньше других слушателей.

эмиттер.добавьте Один Раз Слушателя()

Когда вы добавляете слушателя, используя один раз , он добавляется последним в очередь слушателей и вызывается последним. Использование добавить Один Раз Слушателя он добавляется и вызывается раньше других слушателей.

Оригинал: “https://flaviocopes.com/node-event-emitter/”