EventEmitter Node.js — Емітер подій

369

Від автора: багато об’єктів в Node запускають події, наприклад, net.Server запускає подія при кожному підключенні до нього, fs.readStream запускає подія при відкритті файлу. Всі об’єкти, які запускають події, є екземплярами Node js EventEmitter.

Клас EventEmitter

Як було сказано раніше, клас EventEmitter зберігається в модулі подій. До нього можна отримати доступ за допомогою наступного коду:

// Імпорт модуля подій
var events = require(‘events’);
// Створення об’єкта eventEmitter
var eventEmitter = new events.EventEmitter();

Коли примірник EventEmitter знаходить помилку, він запускає подія «error». Коли додається новий слухач, запускається подія «newListener», а коли слухач видаляється, запускається подія «removeListener». EventEmitter надає кілька властивостей, таких як on і emit. Властивість on використовується для функції прив’язки до події, а властивість emit використовується для запуску події.

Методи

addListener(event listener) — Додає слухач в кінці масиву прослушивателей для вказаної події. Не перевіряється, додано слухач. Кілька викликів, які передають одну й ту ж комбінацію події і прослушивателя, призведуть до того, що слухач буде додано кілька разів. Повертає емітер, тому події можуть запускатися послідовно ланцюжком.

on(event listener) — Додає прослушивателя в кінці масиву прослушивателей для вказаної події. Перевірка доданий вже слухач не виконується. Кілька викликів, які передають одну й ту ж комбінацію події і прослушивателя, призведуть до того, що слухач буде додано кілька разів. Повертає емітер, тому події можуть запускатися послідовно ланцюжком.

once(event listener) — Додає одиночний слухач події. Цей слухач викликається тільки при наступному запуску події, після якого він буде видалено. Повертає емітер, тому події можуть запускатися послідовно ланцюжком.

removeListener(event listener) — Видаляє слухач з масиву прослушивателей для вказаної події. Зверніть увагу: Цей метод змінює індексування масиву прослушивателей після видалення події. removeListener видаляє не більше одного примірника прослушивателя з масиву прослушивателя. Якщо певний слухач був доданий в масив прослушивателей для вказаної події кілька разів, то removeListener потрібно викликати кілька разів, щоб видалити кожен примірник. Повертає емітер, тому події можуть запускатися послідовно ланцюжком.

removeAllListeners([event]) — Видаляє всі прослушиватели для вказаної події. Не рекомендується видаляти прослушиватели, які були додані в іншому місці коду, особливо в емітері, який ви не створювали (наприклад, сокети або потоки файлів). Повертає емітер, тому події можуть запускатися послідовно ланцюжком.

setMaxListeners(n) — За замовчуванням EventEmitters видасть попередження, якщо для певної події додано більше 10 прослушивателей. Це значення за замовчуванням, яке допомагає оптимізувати використання пам’яті. Очевидно, що не для всіх емітерів повинно бути встановлено обмеження в 10. Дана функція дозволяє збільшити цей ліміт. Щоб зняти обмеження потрібно встановити значення нуль.

listeners(event) — Повертає масив прослушивателей для вказаної події.

emit(event, [arg1], [arg2], […]) — Виконує всі прослушиватели в порядку зазначеному в аргументах. Повертає true, якщо події додані прослушиватели, в іншому випадку — false.

Методи класів

listenerCount(emitter, event) — Повертає кількість прослушивателей для цієї події.

Події

NewListener. event — рядок: ім’я події; listener — функція: функція обробника подій. Ця подія відбувається при кожному додаванні прослушивателя. У момент запуску цієї події слухач може бути ще не доданий в масив прослушивателей для події.

removeListener. event – рядок: ім’я події; listener – функція: функція обробника подій. Ця подія відбувається кожен раз при видаленні прослушивателя. У момент запуску цієї події слухач може бути ще не вилучений з масиву прослушивателей для події.

Приклад

Створіть файл з ім’ям js main.js з таким кодом Node.js:

var events = require(‘events’);
var eventEmitter = new events.EventEmitter();
// слухач #1
var listner1 = function listner1() {
console.log(‘listner1 executed.’);
}
// слухач #2
var listner2 = function listner2() {
console.log(‘listner2 executed.’);
}
// Прив’язка функції прослушивателя 1 до події
eventEmitter.addListener(‘connection’, listner1);
// Прив’язка функції прослушивателя 2 до події
eventEmitter.on(‘connection’, listner2);
var eventListeners = require(‘events’).EventEmitter.listenerCount
(eventEmitter,’connection’);
console.log(eventListeners + “Listner(s) listening connection to event”);
// Запуск події connection
eventEmitter.emit(‘connection’);
// Видалення прив’язаною функції прослушивателя 1
eventEmitter.removeListener(‘connection’, listner1);
console.log(“Listner1 will not listen now.”);
// Запуск події connection
eventEmitter.emit(‘connection’);
eventListeners = require(‘events’).EventEmitter.listenerCount(eventEmitter,’connection’);
console.log(eventListeners + “Listner(s) listening connection to event”);
console.log(“Program Ended.”);

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

2 Listner(s) listening to event connection
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to event connection
Program Ended.