Emițătorii de evenimente sunt obiecte din NodeJS care declanșează evenimente prin trimiterea unui mesaj pentru a semnala că a avut loc o acțiune.

Node.js oferă un modul de evenimente încorporat. Conține o clasă de emitere de evenimente care vă permite să creați și să gestionați evenimente personalizate prin funcții de apel invers.

Aici veți învăța cum să emiteți evenimente, să ascultați și să gestionați datele despre evenimente și să gestionați erorile de evenimente în NodeJS.

Emiterea de evenimente

Modulul de evenimente este o parte esențială a mediul Node.js pe partea serverului. Astfel, nu trebuie să-l instalați, ci înainte de a utiliza EventEmitter clasa, trebuie să importați din modulul de evenimente și să îl instanțiați.

Ca astfel:

const EventEmitter = cere("evenimente");

// Instanțierea EventEmitter
const myEmitter = nou EventEmitter();

Puteți emite evenimente folosind EventEmitterlui emite metodă. The emite metoda ia o numele evenimentului și un număr arbitrar de argumente ca parametri.

instagram viewer

Odată ce suni la emite metoda, emite trecutul numele evenimentului. Apoi apelează sincron pe fiecare dintre ascultătorii evenimentului în ordinea în care i-ai înregistrat, pasând argumentele furnizate fiecăruia. În sfârșit, se întoarce Adevărat dacă evenimentul avea ascultători şi fals dacă nu avea niciun ascultător.

De exemplu:

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

În blocul de cod de mai sus, ai trecut TestEvent dupa cum Numele evenimentului, și „foo,” "bar,” 1, și 2 ca argumentele. Când blocul de cod de mai sus rulează, acesta va notifica toți ascultătorii care ascultă TestEvent eveniment. Îi va chema pe acei ascultători cu argumentele date.

Ascultarea evenimentelor

Puteți asculta evenimentele emise folosind EventEmitterlui pe metodă. The pe metoda ia o Numele evenimentului și o funcție de apel invers ca parametri. Când evenimentul cu Numele evenimentului a trecut în pe este emisă, aceasta își invocă funcția de apel invers. Această metodă returnează o referință la EventEmitter, permițându-vă să conectați mai multe apeluri.

De exemplu:

// Primul ascultător
myEmitter.on("TestEvent", () => {
console.log("TestEvent emis!!!");
}); // TestEvent emis!!!

// Al doilea ascultător
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
consolă.Buturuga(`Eveniment emis cu următoarele argumente: ${args}`);
}); // Eveniment emis cu următoarele argumente: foo, bar, 1, 2

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

În blocul de cod de mai sus, când TestEvent evenimentul emite, ascultătorii evenimentului își vor invoca funcțiile de apel invers. Ascultătorii vor reacționa în ordinea în care i-ați înregistrat, ceea ce înseamnă că apelul „primului ascultător” va rula înainte de al doilea și așa mai departe.

Puteți modifica acest comportament folosind EventEmitterlui prependListener metodă. Această metodă ia aceiași parametri ca și pe metodă. Diferența este că această metodă reacționează mai întâi la eveniment, indiferent de momentul în care îl înregistrați.

De exemplu:

myEmitter.on("TestEvent", () => {
console.log("TestEvent emis!!!");
});

myEmitter.prependListener("TestEvent", () => {
console.log("Execută mai întâi")
})

// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

Când se execută blocul de cod de mai sus, „Executes first” va fi înregistrat mai întâi pe consolă, urmat de „TestEvent Emitted!!!” indiferent de ordinea în care le-ați înregistrat din cauza prependListener metodă.

Dacă înregistrați mai mulți ascultători cu prependListener metoda, acestea vor rula în ordine de la ultima la prima.

Observați aranjamentul emițătorului și ascultătorilor. Ascultătorii vin întotdeauna înaintea emițătorului. Acest aranjament se datorează faptului că ascultătorii trebuie să asculte deja evenimentul înainte ca emițătorul să-l emită.

Pentru context, luați în considerare blocul de cod de mai jos:

myEmitter.emit("TestEvent", "foo", "bar", 1, 2);

myEmitter.on("TestEvent", () => {
console.log("TestEvent emis!!!");
});

Dacă rulați blocul de cod de mai sus, nu se întâmplă nimic deoarece, în momentul în care emitentul a emis evenimentul, niciun ascultător nu asculta evenimentul.

Ascultând Evenimente O dată

În funcție de cerințele dvs., poate fi necesar să gestionați unele evenimente o singură dată în ciclul de viață al aplicației. Puteți realiza acest lucru folosind EventEmitterlui o singura data metodă.

Această metodă are aceleași argumente ca și pe metodă și funcționează în mod similar. Singura diferență este că ascultătorii s-au înregistrat la o singura data metoda asculta evenimentul o singură dată.

De exemplu:

myEmitter.once("SingleEvent", () => {
console.log("Eveniment gestionat o singură dată");
});

myEmitter.emit("SingleEvent"); // Eveniment gestionat o dată
myEmitter.emit("SingleEvent"); // Ignorat
myEmitter.emit("SingleEvent"); // Ignorat

Rularea blocului de cod va înregistra „Eveniment gestionat o singură dată” pe consolă o singură dată, indiferent de cât de des emițătorul emite evenimentul.

Ascultătorii înregistrați la o singura data metoda reacționează la eveniment în ordinea în care le înregistrați. Puteți modifica acest comportament folosind prependOnceListener metoda, care funcționează ca prependListener. Singura diferență este că ascultătorii s-au înregistrat la o singura data metoda asculta evenimentul o singură dată.

Gestionarea erorilor cu emițători de evenimente

Ar trebui să ai grijă gestionați corect erorile JavaScript iar ascultătorii evenimentelor nu fac excepție. Erorile negestionate de la acestea vor duce la ieșirea procesului Node.js și la blocarea aplicației dvs.

Pentru a gestiona un eveniment de eroare, cel puțin unul dintre ascultătorii evenimentului trebuie să-l aibă Numele evenimentului setat la eroare.

De exemplu:

myEmitter.on("eroare", (eroare) => {
consolă.eroare(`Eroare: ${error}`);
});

Dacă un ascultător se ocupă de o potențială eroare, ca în blocul de cod de mai sus, va opri aplicația să se prăbușească atunci când apare o eroare.

De exemplu:

myEmitter.emit("eroare", eroare nouă("Aceasta este o eroare"));

Rularea blocului de cod de mai sus va înregistra „Aceasta este o eroare” în consolă, deoarece un ascultător gestionează evenimentele de eroare.

Gestionarea ascultătorilor de evenimente

The EventEmitter clasa are mai multe metode care vă permit să manipulați și să gestionați ascultătorii de evenimente. Puteți obține ascultătorii unui eveniment, îi puteți elimina și puteți seta numărul maxim de ascultători pentru un eveniment.

Iată un tabel care conține EventEmitter metode cu care puteți manipula ascultătorii de evenimente:

Metodă Argumente Valoare returnată
listenerCount numele evenimentului Returnează numărul de ascultători abonați la un eveniment
ascultători numele evenimentului Returnează o serie de ascultători
removeListener numele evenimentului Elimină cel puțin un ascultător dintr-un eventName specificat.
removeAllListeners numele evenimentului Elimină toți ascultătorii pentru un eventName specificat. Dacă nu specificați un nume de eveniment, acest apel de metodă va elimina toți ascultătorii pentru EventEmitter.
setMaxListeners număr Modifică numărul maxim implicit de ascultători per eveniment. Utilizați infinitul sau zero pentru a indica un număr nelimitat de ascultători. În mod implicit, vă puteți abona doar zece ascultători la un eveniment.

Puteți apela aceste metode doar pe un EventEmitter instanță.

De exemplu:

myEmitter.removeListener("TestEvent");

Blocul de cod de mai sus elimină un singur ascultător pentru TestEvent eveniment.

Importanța emițătorilor de evenimente

Node.js adoptă paradigma de programare bazată pe evenimente cu suportul pentru emițători și ascultători de evenimente. Programarea bazată pe evenimente este unul dintre motivele pentru care programele Node.js sunt mai rapide și mai directe decât unele alternative. Puteți sincroniza cu ușurință mai multe evenimente, rezultând o eficiență îmbunătățită.