Odašiljači događaja su objekti u NodeJS koji pokreću događaje slanjem poruke koja signalizira da se radnja dogodila.
Node.js pruža ugrađeni modul događaja. Sadrži klasu emitera događaja koja vam omogućuje stvaranje i rukovanje prilagođenim događajima putem funkcija povratnog poziva.
Ovdje ćete naučiti kako emitirati događaje, slušati i rukovati podacima o događajima i rukovati pogreškama događaja u NodeJS-u.
Emitiranje događaja
Modul događaja ključni je dio okruženje poslužitelja Node.js. Stoga ga ne morate instalirati, ali prije korištenja EventEmitter klase, morate uvesti iz modula događaja i instancirati ga.
ovako:
konst Odašiljač događaja = zahtijevati("događaji");
// Instanciranje EventEmitter-a
konst moj emiter = novi Odašiljač događaja();
Možete emitirati događaje pomoću EventEmitter’s emitirati metoda. The emitirati metoda uzima an eventName i proizvoljan broj argumenata kao parametara.
Nakon što nazovete emitirati metoda, emitira prošlo eventName. Zatim sinkrono poziva svakog od slušatelja događaja redoslijedom kojim ste ih registrirali, prosljeđujući dostavljene argumente svakom. Na kraju se vraća
pravi ako je događaj imao slušatelje i lažno ako ne bi imalo slušatelja.Na primjer:
myEmitter.emit("TestEvent", "fuj", "bar", 1, 2);
U gornjem bloku koda položili ste TestEvent kao Naziv događaja, i "fuj,” "bar,” 1, i 2 kao argumente. Kada se gornji blok koda pokrene, obavijestit će sve slušatelje koji slušaju TestEvent događaj. Pozvat će te slušatelje s danim argumentima.
Osluškujući događaje
Možete slušati emitirane događaje pomoću EventEmitter’s na metoda. The na metoda uzima an Naziv događaja i funkciju povratnog poziva kao parametre. Kada je događaj s Naziv događaja prešao u na emitira se metoda, ona poziva svoju funkciju povratnog poziva. Ova metoda vraća referencu na EventEmitter, što vam omogućuje ulančavanje više poziva.
Na primjer:
// Prvi slušatelj
myEmitter.on("TestEvent", () => {
console.log("Testni događaj emitiran!!!");
}); // Testni događaj emitiran!!!// Drugi slušatelj
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
konzola.log(`Događaj emitiran sa sljedećim argumentima: ${args}`);
}); // Događaj emitiran sa sljedećim argumentima: foo, bar, 1, 2
myEmitter.emit("TestEvent", "fuj", "bar", 1, 2);
U gornjem bloku koda, kada je TestEvent događaj emitira, slušatelji događaja će pozvati svoje funkcije povratnog poziva. Slušatelji će reagirati redoslijedom kojim ste ih registrirali, što znači da će se povratni poziv "prvog slušatelja" pokrenuti prije drugog, i tako dalje.
Ovo ponašanje možete promijeniti pomoću EventEmitter’s prependListener metoda. Ova metoda uzima iste parametre kao i na metoda. Razlika je u tome što ova metoda prva reagira na događaj, bez obzira na vrijeme registracije.
Na primjer:
myEmitter.on("TestEvent", () => {
console.log("Testni događaj emitiran!!!");
});myEmitter.prependListener("TestEvent", () => {
console.log("Prvo se izvršava")
})
// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "fuj", "bar", 1, 2);
Kada se gornji blok koda izvrši, "Prvo se izvršava" prvo će se prijaviti na konzolu, a zatim "TestEvent Emitted!!!" bez obzira na redoslijed kojim ste ih registrirali zbog prependListener metoda.
Ako registrirate nekoliko slušatelja s prependListener metodom, pokretat će se redom od posljednjeg prema prvom.
Obratite pažnju na raspored odašiljača i slušatelja. Slušatelji uvijek dolaze prije emitera. Ovaj raspored je zato što slušatelji već moraju osluškivati događaj prije nego što ga emiter emitira.
Za kontekst, razmotrite blok koda u nastavku:
myEmitter.emit("TestEvent", "fuj", "bar", 1, 2);
myEmitter.on("TestEvent", () => {
console.log("Testni događaj emitiran!!!");
});
Ako pokrenete gornji blok koda, ništa se ne događa jer, u trenutku kada je emiter emitirao događaj, nijedan slušač nije osluškivao događaj.
Osluškujući događaje jednom
Ovisno o vašim zahtjevima, možda ćete morati obraditi neke događaje samo jednom u životnom ciklusu svoje aplikacije. To možete postići pomoću EventEmitter’s jednom metoda.
Ova metoda uzima iste argumente kao i na metoda i radi na sličan način. Jedina razlika je u tome što su se slušatelji prijavili na jednom metoda samo jednom sluša događaj.
Na primjer:
myEmitter.once("SingleEvent", () => {
console.log("Događaj je obrađen jednom");
});
myEmitter.emit("SingleEvent"); // Događaj obrađen jednom
myEmitter.emit("SingleEvent"); // Zanemareno
myEmitter.emit("SingleEvent"); // Zanemareno
Pokretanje bloka koda samo će jednom zabilježiti "Događaj obrađen jednom" na konzoli, bez obzira na to koliko često emiter emitira događaj.
Slušatelji registrirani na jednom metoda reagiraju na događaj redoslijedom kojim ih registrirate. Ovo ponašanje možete promijeniti pomoću prependOnceListener metoda, koja radi kao prependListener. Jedina razlika je u tome što su se slušatelji prijavili na jednom metoda samo jednom sluša događaj.
Rukovanje pogreškama s odašiljačima događaja
Trebali biste se pobrinuti za obraditi JavaScript pogreške na odgovarajući način a slušatelji događaja nisu iznimka. Njihove neobrađene pogreške uzrokovat će izlazak procesa Node.js i rušenje vaše aplikacije.
Za obradu događaja pogreške, barem jedan od slušatelja događaja mora imati svoj Naziv događaja postavljen greška.
Na primjer:
myEmitter.on("greška", (greška) => {
konzola.greška(`Pogreška: ${greška}`);
});
Ako slušatelj obrađuje potencijalnu pogrešku, kao u gornjem bloku koda, zaustavit će se rušenje aplikacije kada dođe do pogreške.
Na primjer:
myEmitter.emit("greška", nova pogreška("Ovo je greška"));
Pokretanje gornjeg bloka koda zabilježit će "Ovo je pogreška" na konzolu jer slušatelj obrađuje događaje pogreške.
Upravljanje slušateljima događaja
The EventEmitter klasa ima nekoliko metoda koje vam omogućuju manipuliranje i upravljanje slušateljima događaja. Možete dobiti slušatelje događaja, ukloniti ih i postaviti maksimalan broj slušatelja za događaj.
Ovdje je tablica koja sadrži EventEmitter metode kojima možete manipulirati slušateljima događaja:
metoda | Argumenti | Povratna vrijednost |
---|---|---|
slušateljBroj | eventName | Vraća broj slušatelja pretplaćenih na događaj |
slušatelja | eventName | Vraća niz slušatelja |
removeListener | eventName | Uklanja najmanje jednog slušatelja iz navedenog eventName. |
ukloniSveSlušatelje | eventName | Uklanja sve slušatelje za navedeni eventName. Ako ne navedete naziv događaja, ovaj poziv metode će ukloniti sve slušatelje za EventEmitter. |
setMaxListeners | broj | Mijenja zadani maksimalni broj slušatelja po događaju. Koristite beskonačnost ili nulu za označavanje neograničenog broja slušatelja. Prema zadanim postavkama, na događaj se možete pretplatiti samo deset slušatelja. |
Ove metode možete pozvati samo na EventEmitter primjer.
Na primjer:
myEmitter.removeListener("TestEvent");
Gornji blok koda uklanja jednog slušatelja za TestEvent događaj.
Važnost odašiljača događaja
Node.js usvaja programsku paradigmu vođenu događajima sa svojom podrškom za emitere i slušače događaja. Programiranje vođeno događajima jedan je od razloga zašto su programi Node.js brži i jednostavniji od nekih alternativa. Možete jednostavno sinkronizirati više događaja, što rezultira poboljšanom učinkovitosti.