Излъчвателите на събития са обекти в NodeJS, които задействат събития, като изпращат съобщение, за да сигнализират, че е извършено действие.

Node.js предоставя вграден модул за събития. Той съдържа клас излъчвател на събития, който ви позволява да създавате и обработвате персонализирани събития чрез функции за обратно извикване.

Тук ще научите как да излъчвате събития, да слушате и обработвате данни за събития и да обработвате грешки при събития в NodeJS.

Излъчване на събития

Модулът за събития е основна част от сървърната среда на Node.js. Следователно не е необходимо да го инсталирате, но преди да използвате EventEmitter клас, трябва да импортирате от модула за събития и да го инстанциирате.

Така:

конст EventEmitter = изискват(„събития“);

// Създаване на EventEmitter
конст myEmitter = нов EventEmitter();

Можете да излъчвате събития, като използвате EventEmitterизлъчвам метод. The излъчвам методът отнема eventName и произволен брой аргументи като параметри.

След като се обадите на излъчвам метод, той излъчва преминалия

instagram viewer
eventName. След това извиква синхронно всеки от слушателите на събитието в реда, в който сте ги регистрирали, като предава предоставените аргументи на всеки. Накрая се връща вярно ако събитието имаше слушатели и невярно ако нямаше слушатели.

Например:

myEmitter.emit("TestEvent", "Фу", "бар", 1, 2);

В кодовия блок по-горе преминахте TestEvent като Име на събитието, и "фу,” "бар,” 1, и 2 като аргументи. Когато кодовият блок по-горе се изпълни, той ще уведоми всички слушатели, които слушат за TestEvent събитие. Той ще извика тези слушатели с дадените аргументи.

Слушане за събития

Можете да слушате за излъчвани събития, като използвате EventEmitterНа метод. The На методът отнема Име на събитието и функция за обратно извикване като параметри. Когато събитието с Име на събитието премина в На методът се излъчва, той извиква своята функция за обратно извикване. Този метод връща препратка към EventEmitter, което ви позволява да свържете няколко обаждания във верига.

Например:

// Първи слушател
myEmitter.on("TestEvent", () => {
console.log("TestEvent Излъчено!!!");
}); // Излъчено е тестово събитие!!!

// Втори слушател
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
конзола.log(`Излъчено събитие със следните аргументи: ${args}`);
}); // Излъчено събитие със следните аргументи: foo, bar, 1, 2

myEmitter.emit("TestEvent", "Фу", "бар", 1, 2);

В кодовия блок по-горе, когато TestEvent събитие излъчва, слушателите на събитието ще извикат своите функции за обратно извикване. Слушателите ще реагират в реда, в който сте ги регистрирали, което означава, че обратното извикване на „първия слушател“ ще се изпълнява преди второто и т.н.

Можете да промените това поведение, като използвате EventEmitterprependListener метод. Този метод приема същите параметри като На метод. Разликата е, че този метод реагира първи на събитието, независимо от времето, в което го регистрирате.

Например:

myEmitter.on("TestEvent", () => {
console.log("TestEvent Излъчено!!!");
});

myEmitter.prependListener("TestEvent", () => {
console.log("Първо изпълнява")
})

// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "Фу", "бар", 1, 2);

Когато кодовият блок по-горе се изпълни, „Първо се изпълнява“ ще бъде регистрирано първо в конзолата, последвано от „TestEvent Emitted!!!“ независимо от реда, в който сте ги регистрирали поради prependListener метод.

Ако регистрирате няколко слушатели в prependListener метод, те ще се изпълняват в ред от последния до първия.

Обърнете внимание на разположението на излъчвателя и слушателите. Слушателите винаги идват преди излъчвателя. Тази подредба е така, защото слушателите трябва вече да слушат за събитието, преди излъчвателят да го излъчи.

За контекст разгледайте кодовия блок по-долу:

myEmitter.emit("TestEvent", "Фу", "бар", 1, 2);

myEmitter.on("TestEvent", () => {
console.log("TestEvent Излъчено!!!");
});

Ако стартирате кодовия блок по-горе, нищо не се случва, защото по времето, когато емитерът е излъчил събитието, никой слушател не е слушал събитието.

Слушане за събития веднъж

В зависимост от вашите изисквания може да се наложи да обработвате някои събития само веднъж в жизнения цикъл на вашето приложение. Можете да постигнете това с помощта на EventEmitterведнъж метод.

Този метод приема същите аргументи като На метод и работи по подобен начин. Единствената разлика е, че слушателите се регистрираха в веднъж метод слуша само веднъж за събитието.

Например:

myEmitter.once("Единично събитие", () => {
console.log("Събитието се обработва веднъж");
});

myEmitter.emit("Единично събитие"); // Събитието се обработва веднъж
myEmitter.emit("Единично събитие"); // Игнорирано
myEmitter.emit("Единично събитие"); // Игнорирано

Изпълнението на кодовия блок ще регистрира „Събитие, обработено веднъж“ в конзолата само веднъж, независимо от това колко често емитерът излъчва събитието.

Слушатели, регистрирани в веднъж метод реагират на събитието в реда, в който ги регистрирате. Можете да промените това поведение, като използвате prependOnceListener метод, който работи като prependListener. Единствената разлика е, че слушателите се регистрираха в веднъж метод слуша само веднъж за събитието.

Обработка на грешки с излъчватели на събития

Трябва да се погрижите за обработват правилно грешките в JavaScript и слушателите на събития не са изключение. Необработените грешки от тях ще доведат до спиране на процеса Node.js и до срив на приложението ви.

За да обработи събитие за грешка, поне един от слушателите на събитието трябва да има него Име на събитието настроен на грешка.

Например:

myEmitter.on("грешка", (грешка) => {
конзола.грешка(`Грешка: ${грешка}`);
});

Ако слушател обработва потенциална грешка, както в кодовия блок по-горе, ще спре приложението да се срива, когато възникне грешка.

Например:

myEmitter.emit("грешка", нова грешка("Това е грешка"));

Изпълнението на кодовия блок по-горе ще регистрира „Това е грешка“ в конзолата, защото слушател обработва събития за грешка.

Управление на слушатели на събития

The EventEmitter class има няколко метода, които ви позволяват да манипулирате и управлявате слушатели на събития. Можете да получите слушатели на събитие, да ги премахнете и да зададете максималния брой слушатели за събитие.

Ето таблица, съдържаща EventEmitter методи, с които можете да манипулирате слушатели на събития:

Метод Аргументи Върната стойност
listenerCount eventName Връща броя слушатели, абонирани за събитие
слушатели eventName Връща масив от слушатели
removeListener eventName Премахва поне един слушател от определено име на събитието.
removeAllListeners eventName Премахва всички слушатели за определено eventName. Ако не посочите име на събитие, това извикване на метод ще премахне всички слушатели за EventEmitter.
setMaxListeners номер Променя максималния брой слушатели по подразбиране на събитие. Използвайте безкрайност или нула, за да посочите неограничен брой слушатели. По подразбиране можете да абонирате само десет слушатели за събитие.

Можете да извиквате тези методи само на an EventEmitter инстанция.

Например:

myEmitter.removeListener("TestEvent");

Кодовият блок по-горе премахва един слушател за TestEvent събитие.

Значението на излъчвателите на събития

Node.js възприема парадигмата за програмиране, управлявано от събития, с поддръжката си за излъчватели и слушатели на събития. Програмирането, управлявано от събития, е една от причините Node.js програмите да са по-бързи и по-прости от някои алтернативи. Можете лесно да синхронизирате множество събития, което води до подобрена ефективност.