Учебники

Node.js — Event Emitter

Многие объекты в узле генерируют события, например, net.Server генерирует событие каждый раз, когда к нему подключается одноранговый узел, а fs.readStream генерирует событие при открытии файла. Все объекты, которые генерируют события, являются экземплярами events.EventEmitter.

Класс EventEmitter

Как мы видели в предыдущем разделе, класс EventEmitter находится в модуле событий. Это доступно через следующий код —

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

Когда экземпляр EventEmitter сталкивается с какой-либо ошибкой, он генерирует событие error. Когда добавляется новый слушатель, вызывается событие «newListener», а когда слушатель удаляется, вызывается событие «removeListener».

EventEmitter предоставляет несколько свойств, таких как on и emit . Свойство on используется для связывания функции с событием, а emit — для запуска события.

методы

Sr.No. Метод и описание
1

addListener (событие, слушатель)

Добавляет слушателя в конце массива слушателей для указанного события. Не делается никаких проверок, чтобы увидеть, был ли слушатель уже добавлен. Многократные вызовы, передающие ту же самую комбинацию события и слушателя, приведут к тому, что слушатель будет добавлен несколько раз. Возвращает эмиттер, поэтому звонки могут быть связаны.

2

на (событие, слушатель)

Добавляет слушателя в конце массива слушателей для указанного события. Не делается никаких проверок, чтобы увидеть, был ли слушатель уже добавлен. Многократные вызовы, передающие ту же самую комбинацию события и слушателя, приведут к тому, что слушатель будет добавлен несколько раз. Возвращает эмиттер, поэтому звонки могут быть связаны.

3

один раз (событие, слушатель)

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

4

removeListener (событие, слушатель)

Удаляет слушателя из массива слушателей для указанного события. Осторожно — изменяет индексы массива в массиве слушателя за слушателем. removeListener удалит не более одного экземпляра слушателя из массива слушателей. Если какой-либо один прослушиватель был добавлен несколько раз в массив слушателей для указанного события, то для удаления каждого экземпляра необходимо вызывать removeListener несколько раз. Возвращает эмиттер, поэтому звонки могут быть связаны.

5

removeAllListeners ([событие])

Удаляет всех слушателей или участников указанного события. Не стоит удалять прослушиватели, которые были добавлены где-то еще в коде, особенно когда он находится на эмиттере, который вы не создали (например, сокеты или потоки файлов). Возвращает эмиттер, поэтому звонки могут быть связаны.

6

setMaxListeners (п)

По умолчанию EventEmitters выводит предупреждение, если для определенного события добавлено более 10 слушателей. Это полезное значение по умолчанию, которое помогает найти утечки памяти. Очевидно, что не все излучатели должны быть ограничены 10. Эта функция позволяет увеличить это значение. Установить на ноль для неограниченного.

7

слушатели (событие)

Возвращает массив слушателей для указанного события.

8

emit (событие, [arg1], [arg2], […])

Выполните каждый из слушателей в порядке с предоставленными аргументами. Возвращает true, если у события были слушатели, иначе false.

addListener (событие, слушатель)

Добавляет слушателя в конце массива слушателей для указанного события. Не делается никаких проверок, чтобы увидеть, был ли слушатель уже добавлен. Многократные вызовы, передающие ту же самую комбинацию события и слушателя, приведут к тому, что слушатель будет добавлен несколько раз. Возвращает эмиттер, поэтому звонки могут быть связаны.

на (событие, слушатель)

Добавляет слушателя в конце массива слушателей для указанного события. Не делается никаких проверок, чтобы увидеть, был ли слушатель уже добавлен. Многократные вызовы, передающие ту же самую комбинацию события и слушателя, приведут к тому, что слушатель будет добавлен несколько раз. Возвращает эмиттер, поэтому звонки могут быть связаны.

один раз (событие, слушатель)

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

removeListener (событие, слушатель)

Удаляет слушателя из массива слушателей для указанного события. Осторожно — изменяет индексы массива в массиве слушателя за слушателем. removeListener удалит не более одного экземпляра слушателя из массива слушателей. Если какой-либо один прослушиватель был добавлен несколько раз в массив слушателей для указанного события, то для удаления каждого экземпляра необходимо вызывать removeListener несколько раз. Возвращает эмиттер, поэтому звонки могут быть связаны.

removeAllListeners ([событие])

Удаляет всех слушателей или участников указанного события. Не стоит удалять прослушиватели, которые были добавлены где-то еще в коде, особенно когда он находится на эмиттере, который вы не создали (например, сокеты или потоки файлов). Возвращает эмиттер, поэтому звонки могут быть связаны.

setMaxListeners (п)

По умолчанию EventEmitters выводит предупреждение, если для определенного события добавлено более 10 слушателей. Это полезное значение по умолчанию, которое помогает найти утечки памяти. Очевидно, что не все излучатели должны быть ограничены 10. Эта функция позволяет увеличить это значение. Установить на ноль для неограниченного.

слушатели (событие)

Возвращает массив слушателей для указанного события.

emit (событие, [arg1], [arg2], […])

Выполните каждый из слушателей в порядке с предоставленными аргументами. Возвращает true, если у события были слушатели, иначе false.

Методы класса

Sr.No. Метод и описание
1

listenerCount (эмитент, событие)

Возвращает количество слушателей для данного события.

listenerCount (эмитент, событие)

Возвращает количество слушателей для данного события.

События

Sr.No. События и описание
1

NewListener

  • event — String: название события

  • слушатель — Функция: функция обработчика события

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

2

удаления слушателя

  • event — String Имя события

  • listener — Function Функция обработчика событий

Это событие генерируется каждый раз, когда кто-то удаляет слушателя. Когда это событие инициировано, слушатель, возможно, еще не был удален из массива слушателей для события.

NewListener

event — String: название события

слушатель — Функция: функция обработчика события

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

удаления слушателя

event — String Имя события

listener — Function Функция обработчика событий

Это событие генерируется каждый раз, когда кто-то удаляет слушателя. Когда это событие инициировано, слушатель, возможно, еще не был удален из массива слушателей для события.

пример

Создайте файл js с именем main.js со следующим кодом Node.js:

Live Demo

var events = require('events');
var eventEmitter = new events.EventEmitter();

// listener #1
var listner1 = function listner1() {
   console.log('listner1 executed.');
}

// listener #2
var listner2 = function listner2() {
   console.log('listner2 executed.');
}

// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);

// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);

var eventListeners = require('events').EventEmitter.listenerCount
   (eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

// Fire the connection event 
eventEmitter.emit('connection');

// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");

// Fire the connection event 
eventEmitter.emit('connection');

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");

Теперь запустите main.js, чтобы увидеть результат —

$ node main.js

Проверьте вывод.