Генераторы событий — это объекты в NodeJS, которые инициируют события, отправляя сообщение о том, что действие произошло.
Node.js предоставляет встроенный модуль событий. Он содержит класс генератора событий, который позволяет создавать и обрабатывать пользовательские события с помощью функций обратного вызова.
Здесь вы узнаете, как генерировать события, прослушивать и обрабатывать данные событий, а также обрабатывать ошибки событий в NodeJS.
Отправка событий
Модуль событий является основной частью серверная среда Node.js. Таким образом, вам не нужно его устанавливать, но перед использованием эмиттер событий class, вы должны импортировать его из модуля событий и создать его экземпляр.
Вот так:
константа Эмиттер событий = требовать("события");
// Создание экземпляра EventEmitter
константа мой излучатель = новый Эмиттер Событий();
Вы можете генерировать события, используя эмиттер событийх испускают метод. испускают метод принимает название события и произвольное количество аргументов в качестве параметров.
Как только вы позвоните в испускают метод, он испускает переданный название события. Затем он синхронно вызывает каждого из слушателей события в том порядке, в котором вы их зарегистрировали, передавая каждому предоставленные аргументы. Наконец, возвращается истинный если бы у мероприятия были слушатели и ЛОЖЬ если бы у него не было слушателей.
Например:
мойEmitter.emit("Тестовое событие", "фу", "бар", 1, 2);
В приведенном выше блоке кода вы передали Тестовое событие как Название события, и "фу,” "бар,” 1, и 2 как аргументы. Когда приведенный выше блок кода запускается, он уведомляет всех слушателей, прослушивающих Тестовое событие событие. Он вызовет этих слушателей с заданными аргументами.
Прослушивание событий
Вы можете прослушивать испускаемые события с помощью эмиттер событийх на метод. на метод принимает Название события и функция обратного вызова в качестве параметров. Когда событие с Название события прошел в на испускается, он вызывает свою функцию обратного вызова. Этот метод возвращает ссылку на эмиттер событий, что позволяет объединить несколько вызовов в цепочку.
Например:
// Первый слушатель
мой излучатель.на("Тестовое событие", () => {
console.log("Выпущено тестовое событие!!!");
}); // Выпущено TestEvent!!!// Второй слушатель
мой излучатель.на("Тестовое событие", (...аргументы) => {
аргументы = args.join(", ");
консоль.бревно(`Событие отправлено со следующими аргументами: ${аргументы}`);
}); // Событие выдается со следующими аргументами: foo, bar, 1, 2
мойEmitter.emit("Тестовое событие", "фу", "бар", 1, 2);
В блоке кода выше, когда Тестовое событие событие испускается, слушатели события будут вызывать свои функции обратного вызова. Слушатели будут реагировать в том порядке, в котором вы их зарегистрировали, а это означает, что обратный вызов «первого слушателя» будет выполняться перед вторым и так далее.
Вы можете изменить это поведение с помощью эмиттер событийх prependListener метод. Этот метод принимает те же параметры, что и на метод. Разница в том, что этот метод сначала реагирует на событие, независимо от того, когда вы его регистрируете.
Например:
мой излучатель.на("Тестовое событие", () => {
console.log("Выпущено тестовое событие!!!");
});мойEmitter.prependListener("Тестовое событие", () => {
console.log("Выполняется первым")
})
// console.log (myEmitter.listeners("Тестовое событие"));
мойEmitter.emit("Тестовое событие", "фу", "бар", 1, 2);
При выполнении приведенного выше блока кода сначала в консоль будет выведено сообщение «Executes first», а затем «TestEvent Emitted!!!». независимо от порядка, в котором вы их зарегистрировали из-за prependListener метод.
Если вы зарегистрируете несколько слушателей с prependListener метод, они будут выполняться в порядке от последнего к первому.
Обратите внимание на расположение излучателя и слушателей. Слушатели всегда предшествуют излучателю. Такое расположение связано с тем, что прослушиватели уже должны прослушивать событие до того, как эмиттер отправит его.
Для контекста рассмотрите блок кода ниже:
мойEmitter.emit("Тестовое событие", "фу", "бар", 1, 2);
мой излучатель.на("Тестовое событие", () => {
console.log("Выпущено тестовое событие!!!");
});
Если вы запустите приведенный выше блок кода, ничего не произойдет, потому что в то время, когда эмиттер сгенерировал событие, ни один слушатель не прослушивал событие.
Прослушивание событий один раз
В зависимости от ваших требований вам может потребоваться обрабатывать некоторые события только один раз в жизненном цикле вашего приложения. Вы можете добиться этого с помощью эмиттер событийх один раз метод.
Этот метод принимает те же аргументы, что и на метод и работает аналогично. Разница лишь в том, что слушатели, зарегистрированные в один раз метод прослушивает событие только один раз.
Например:
мойEmitter.once("Однособытие", () => {
console.log("Событие обработано один раз");
});
мойEmitter.emit("Однособытие"); // Событие обрабатывается один раз
мойEmitter.emit("Однособытие"); // игнорируется
мойEmitter.emit("Однособытие"); // игнорируется
Запуск блока кода будет регистрировать «Событие обработано один раз» на консоли только один раз, независимо от того, как часто эмиттер генерирует событие.
Слушатели, зарегистрированные в один раз Метод реагирует на событие в том порядке, в котором вы их регистрируете. Вы можете изменить это поведение с помощью prependOnceListener метод, который работает как prependListener. Разница лишь в том, что слушатели, зарегистрированные в один раз метод прослушивает событие только один раз.
Обработка ошибок с помощью генераторов событий
Вам следует позаботиться о правильно обрабатывать ошибки JavaScript и прослушиватели событий не являются исключением. Необработанные ошибки из них приведут к завершению процесса Node.js и сбою вашего приложения.
Для обработки события ошибки по крайней мере один из обработчиков события должен иметь Название события установлен в ошибка.
Например:
мой излучатель.на("ошибка", (ошибка) => {
консоль.ошибка(`Ошибка: ${ошибка}`);
});
Наличие слушателя, обрабатывающего потенциальную ошибку, как в блоке кода выше, предотвратит сбой приложения при возникновении ошибки.
Например:
мойEmitter.emit("ошибка", новая ошибка("это ошибка"));
Запуск приведенного выше блока кода выведет на консоль сообщение «Это ошибка», поскольку прослушиватель обрабатывает события ошибки.
Управление прослушивателями событий
эмиттер событий class имеет несколько методов, которые позволяют вам манипулировать прослушивателями событий и управлять ими. Вы можете получить слушателей события, удалить их и установить максимальное количество слушателей для события.
Вот таблица, содержащая эмиттер событий методы, с помощью которых вы можете манипулировать прослушивателями событий:
Метод | Аргументы | Возвращаемое значение |
---|---|---|
listenerCount | название события | Возвращает количество слушателей, подписавшихся на событие |
слушатели | название события | Возвращает массив слушателей |
удалитьслушатель | название события | Удаляет по крайней мере одного слушателя из указанного eventName. |
удалить все слушатели | название события | Удаляет всех слушателей для указанного eventName. Если вы не укажете имя события, этот вызов метода удалит всех слушателей для EventEmitter. |
setMaxListeners | число | Изменяет максимальное количество слушателей по умолчанию на событие. Используйте бесконечность или ноль, чтобы указать неограниченное количество слушателей. По умолчанию вы можете подписаться на событие только десятью слушателями. |
Вы можете вызывать эти методы только на эмиттер событий пример.
Например:
myEmitter.removeListener("Тестовое событие");
Приведенный выше блок кода удаляет один прослушиватель для Тестовое событие событие.
Важность генераторов событий
Node.js использует парадигму программирования, управляемую событиями, с поддержкой генераторов и прослушивателей событий. Программирование, управляемое событиями, — одна из причин, по которой программы Node.js быстрее и проще, чем некоторые альтернативы. Вы можете легко синхронизировать несколько событий, что повысит эффективность.