Если вы работали с 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/”