Oddajniki dogodkov so objekti v NodeJS, ki sprožijo dogodke s pošiljanjem sporočila, ki signalizira, da je prišlo do dejanja.

Node.js ponuja vgrajen modul dogodkov. Vsebuje razred oddajnika dogodkov, ki vam omogoča ustvarjanje in upravljanje dogodkov po meri prek funkcij povratnega klica.

Tukaj se boste naučili oddajati dogodke, poslušati in obravnavati podatke o dogodkih ter obravnavati napake dogodkov v NodeJS.

Oddajanje dogodkov

Modul dogodkov je osrednji del strežniško okolje Node.js. Tako vam ga ni treba namestiti, vendar pred uporabo EventEmitter razreda, morate uvoziti iz modula dogodkov in ga instancirati.

takole:

konst EventEmitter = zahtevati("dogodki");

// Instanciranje EventEmitterja
konst moj oddajnik = novo EventEmitter();

Dogodke lahko oddate z uporabo EventEmitter’s oddajajo metoda. The oddajajo metoda traja an eventName in poljubno število argumentov kot parametrov.

Ko enkrat pokličete oddajajo metoda, oddaja preteklost eventName. Nato sinhrono pokliče vsakega od poslušalcev dogodka v vrstnem redu, kot ste jih registrirali, in vsakemu posreduje posredovane argumente. Končno se vrne

prav če bi dogodek imel poslušalce ter lažno če ne bi imela poslušalcev.

Na primer:

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

V zgornjem kodnem bloku ste opravili TestEvent kot ime dogodka, in "foo,” "bar,” 1, in 2 kot argumenti. Ko se zgornji blok kode zažene, bo obvestil vse poslušalce, ki poslušajo TestEvent dogodek. Te poslušalce bo poklical z danimi argumenti.

Poslušanje dogodkov

Oddane dogodke lahko poslušate z uporabo EventEmitter’s na metoda. The na metoda traja an Ime dogodka in funkcijo povratnega klica kot parametra. Ko je dogodek z Ime dogodka prešla v na oddana metoda, prikliče svojo funkcijo povratnega klica. Ta metoda vrne sklic na EventEmitter, kar vam omogoča veriženje več klicev.

Na primer:

// Prvi poslušalec
myEmitter.on("TestEvent", () => {
console.log("Testni dogodek oddan!!!");
}); // Testni dogodek oddan!!!

// Drugi poslušalec
myEmitter.on("TestEvent", (...argi) => {
args = args.join(", ");
konzola.log(`Dogodek sprožen z naslednjimi argumenti: ${args}`);
}); // Izdan dogodek z naslednjimi argumenti: foo, bar, 1, 2

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

V zgornjem kodnem bloku, ko je TestEvent dogodek oddaja, bodo poslušalci dogodka priklicali svoje funkcije povratnega klica. Poslušalci se bodo odzvali v vrstnem redu, kot ste jih registrirali, kar pomeni, da se bo povratni klic »prvega poslušalca« izvedel pred drugim in tako naprej.

To vedenje lahko spremenite z uporabo EventEmitter’s prependListener metoda. Ta metoda ima enake parametre kot na metoda. Razlika je v tem, da se ta metoda najprej odzove na dogodek, ne glede na to, kdaj ga registrirate.

Na primer:

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

myEmitter.prependListener("TestEvent", () => {
console.log("Najprej se izvrši")
})

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

Ko se zgornji blok kode izvede, se v konzolo najprej zabeleži »Izvede najprej«, čemur sledi »TestEvent Emitted!!!« ne glede na vrstni red, v katerem ste jih registrirali zaradi prependListener metoda.

Če prijavite več poslušalcev v prependListener metodo, bodo potekale po vrstnem redu od zadnjega do prvega.

Upoštevajte razporeditev oddajnika in poslušalcev. Poslušalci vedno pridejo pred oddajnika. Ta ureditev je zato, ker morajo poslušalci že poslušati dogodek, preden ga oddajnik odda.

Za kontekst upoštevajte spodnji blok kode:

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

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

Če zaženete zgornji kodni blok, se ne zgodi nič, ker v času, ko je oddajnik oddal dogodek, noben poslušalec ni poslušal dogodka.

Enkratno poslušanje dogodkov

Odvisno od vaših zahtev boste morda morali nekatere dogodke obravnavati samo enkrat v življenjskem ciklu aplikacije. To lahko dosežete z uporabo EventEmitter’s enkrat metoda.

Ta metoda ima enake argumente kot na metodo in deluje podobno. Razlika je le v tem, da se poslušalci prijavili pri enkrat metoda le enkrat posluša dogodek.

Na primer:

myEmitter.once("SingleEvent", () => {
console.log("Dogodek obravnavan enkrat");
});

myEmitter.emit("SingleEvent"); // Dogodek obravnavan enkrat
myEmitter.emit("SingleEvent"); // Prezrto
myEmitter.emit("SingleEvent"); // Prezrto

Če zaženete blok kode, boste samo enkrat zabeležili »Event obravnavan enkrat« v konzolo, ne glede na to, kako pogosto oddajnik oddaja dogodek.

Poslušalci prijavljeni pri enkrat se odzovejo na dogodek v vrstnem redu, kot jih registrirate. To vedenje lahko spremenite z uporabo prependOnceListener metoda, ki deluje kot prependListener. Razlika je le v tem, da se poslušalci prijavili pri enkrat metoda le enkrat posluša dogodek.

Obravnavanje napak z oddajniki dogodkov

Moral bi paziti na ustrezno obravnavati napake JavaScript in poslušalci dogodkov niso izjema. Njihove neobdelane napake bodo povzročile izhod iz procesa Node.js in zrušitev vaše aplikacije.

Za obravnavo dogodka napake mora imeti vsaj eden od poslušalcev dogodka Ime dogodka nastavljena napaka.

Na primer:

myEmitter.on("napaka", (napaka) => {
konzola.napaka(`Napaka: ${error}`);
});

Če poslušalec obravnava morebitno napako, kot v zgornjem bloku kode, bo aplikacija preprečila, da bi se zrušila, ko pride do napake.

Na primer:

myEmitter.emit("napaka", nova napaka("To je napaka"));

Zagon zgornjega bloka kode bo v konzolo zabeležil »To je napaka«, ker poslušalec obravnava dogodke napak.

Upravljanje poslušalcev dogodkov

The EventEmitter razred ima več metod, ki vam omogočajo manipulacijo in upravljanje poslušalcev dogodkov. Pridobite lahko poslušalce dogodka, jih odstranite in nastavite največje število poslušalcev za dogodek.

Tukaj je tabela, ki vsebuje EventEmitter metode, s katerimi lahko upravljate poslušalce dogodkov:

Metoda Argumenti Povratna vrednost
poslušalecŠtevilo eventName Vrne število poslušalcev, naročenih na dogodek
poslušalci eventName Vrne niz poslušalcev
removeListener eventName Odstrani vsaj enega poslušalca iz podanega eventName.
odstraniVse poslušalce eventName Odstrani vse poslušalce za določen eventName. Če ne podate imena dogodka, bo ta klic metode odstranil vse poslušalce za EventEmitter.
setMaxListeners število Spremeni privzeto največje število poslušalcev na dogodek. Uporabite neskončnost ali nič, da označite neomejeno število poslušalcev. Privzeto lahko na dogodek naročite le deset poslušalcev.

Te metode lahko pokličete samo na EventEmitter primerek.

Na primer:

myEmitter.removeListener("TestEvent");

Zgornji blok kode odstrani enega poslušalca za TestEvent dogodek.

Pomen oddajnikov dogodkov

Node.js sprejme paradigmo programiranja, ki temelji na dogodkih, s podporo za oddajnike in poslušalce dogodkov. Programiranje na podlagi dogodkov je eden od razlogov, zakaj so programi Node.js hitrejši in enostavnejši od nekaterih alternativ. Z lahkoto lahko sinhronizirate več dogodkov, kar ima za posledico izboljšano učinkovitost.