Node.js - эмиттер событий
Многие объекты в Node генерируют события, например net.Server генерирует событие каждый раз, когда одноранговый узел подключается к нему, fs.readStream генерирует событие при открытии файла. Все объекты, которые испускают события, являются экземплярами событий .EventEmitter.
EventEmitter Класс
Как мы видели в предыдущем разделе, класс EventEmitter находится в модуле событий. Он доступен через следующий код -
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Когда экземпляр EventEmitter сталкивается с какой-либо ошибкой, он генерирует событие «ошибка». Когда добавляется новый слушатель, запускается событие 'newListener', а когда слушатель удаляется, запускается событие 'removeListener'.
EventEmitter предоставляет несколько свойств, например on и emit. on свойство используется для привязки функции к событию и emit используется для запуска события.
Методы
Sr. No. | Метод и описание |
---|---|
1 |
addListener(event, listener) Добавляет слушателя в конец массива слушателей для указанного события. Никаких проверок, чтобы увидеть, был ли уже добавлен слушатель, не производится. Множественные вызовы, передающие одну и ту же комбинацию события и слушателя, приведут к тому, что слушатель будет добавлен несколько раз. Возвращает эмиттер, поэтому вызовы можно связывать. |
2 |
on(event, listener) Добавляет слушателя в конец массива слушателей для указанного события. Никаких проверок, чтобы увидеть, был ли уже добавлен слушатель, не производится. Множественные вызовы, передающие одну и ту же комбинацию события и слушателя, приведут к тому, что слушатель будет добавлен несколько раз. Возвращает эмиттер, поэтому вызовы можно связывать. |
3 | once(event, listener) Добавляет одноразового прослушивателя к событию. Этот слушатель вызывается только при следующем запуске события, после чего он удаляется. Возвращает эмиттер, поэтому вызовы можно связывать. |
4 |
removeListener(event, listener) Удаляет слушателя из массива слушателей для указанного события. Caution −Он изменяет индексы массива в массиве слушателя позади слушателя. removeListener удалит не более одного экземпляра слушателя из массива слушателей. Если какой-либо отдельный слушатель был добавлен несколько раз в массив слушателей для указанного события, то removeListener необходимо вызывать несколько раз для удаления каждого экземпляра. Возвращает эмиттер, поэтому вызовы можно связывать. |
5 |
removeAllListeners([event]) Удаляет всех слушателей или слушателей указанного события. Не рекомендуется удалять слушателей, которые были добавлены где-то еще в коде, особенно когда они находятся на эмиттере, который вы не создавали (например, сокеты или файловые потоки). Возвращает эмиттер, поэтому вызовы можно связывать. |
6 |
setMaxListeners(n) По умолчанию EventEmitters выводит предупреждение, если для определенного события добавлено более 10 слушателей. Это полезное значение по умолчанию, которое помогает находить утечки памяти. Очевидно, что не все эмиттеры должны быть ограничены до 10. Эта функция позволяет увеличить это значение. Установите на ноль без ограничений. |
7 |
listeners(event) Возвращает массив слушателей для указанного события. |
8 |
emit(event, [arg1], [arg2], [...]) Выполните каждого из слушателей по порядку с предоставленными аргументами. Возвращает true, если у события есть слушатели, иначе false. |
Методы класса
Sr. No. | Метод и описание |
---|---|
1 |
listenerCount(emitter, event) Возвращает количество слушателей для данного события. |
События
Sr. No. | События и описание |
---|---|
1 | newListener
Это событие генерируется каждый раз при добавлении слушателя. Когда это событие запускается, слушатель, возможно, еще не был добавлен в массив слушателей для события. |
2 |
removeListener
Это событие генерируется каждый раз, когда кто-то удаляет слушателя. Когда это событие запускается, слушатель, возможно, еще не был удален из массива слушателей для события. |
пример
Создайте файл js с именем main.js со следующим кодом Node.js -
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
Проверьте вывод.
2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.