Emitory udalostí sú objekty v NodeJS, ktoré spúšťajú udalosti odoslaním správy, ktorá signalizuje, že nastala akcia.

Node.js poskytuje vstavaný modul udalostí. Obsahuje triedu emitorov udalostí, ktorá vám umožňuje vytvárať a spracovávať vlastné udalosti prostredníctvom funkcií spätného volania.

Tu sa dozviete, ako vysielať udalosti, počúvať a spracovávať dáta udalostí a spracovávať chyby udalostí v NodeJS.

Vysielanie udalostí

Modul udalostí je hlavnou súčasťou prostredie Node.js na strane servera. Preto ho nemusíte inštalovať, ale pred použitím EventEmitter triedy, musíte importovať z modulu udalostí a vytvoriť inštanciu.

Ako:

konšt EventEmitter = vyžadovať("diania");

// Vytvorenie inštancie EventEmitter
konšt myEmitter = Nový EventEmitter();

Udalosti môžete vysielať pomocou EventEmitters emitovať metóda. The emitovať metóda trvá an eventName a ľubovoľný počet argumentov ako parametrov.

Akonáhle zavoláte emitovať spôsob, vysiela odovzdané eventName. Potom synchrónne zavolá každého z poslucháčov udalosti v poradí, v akom ste ich zaregistrovali, pričom každému odovzdá dodané argumenty. Nakoniec sa to vráti

instagram viewer
pravda ak podujatie malo poslucháčov a falošný keby to nemalo poslucháčov.

Napríklad:

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

V bloku kódu vyššie ste prešli TestEvent ako EventName, a "foo,” "bar,” 1, a 2 ako argumenty. Keď sa spustí blok kódu vyššie, upozorní všetkých poslucháčov, ktorí počúvajú TestEvent udalosť. Zavolá tých poslucháčov s danými argumentmi.

Počúvanie udalostí

Môžete počúvať vysielané udalosti pomocou EventEmitters na metóda. The na metóda trvá an EventName a funkciu spätného volania ako parametre. Pri udalosti s EventName prešiel do na spôsobí, že vyvolá svoju funkciu spätného volania. Táto metóda vráti odkaz na EventEmitter, čo vám umožní reťaziť viacero hovorov.

Napríklad:

// Prvý poslucháč
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emited!!!");
}); // TestEvent Emited!!!

// Druhý poslucháč
myEmitter.on("TestEvent", (...argumenty) => {
args = args.join(", ");
konzoly.log(„Udalosť bola vygenerovaná s nasledujúcimi argumentmi: ${args}`);
}); // Udalosť vygenerovaná s nasledujúcimi argumentmi: foo, bar, 1, 2

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

V bloku kódu vyššie, keď je TestEvent udalosť emituje, poslucháči udalosti vyvolajú svoje funkcie spätného volania. Poslucháči budú reagovať v poradí, v akom ste ich zaregistrovali, čo znamená, že spätné volanie „prvého poslucháča“ prebehne pred druhým atď.

Toto správanie môžete zmeniť pomocou EventEmitters prependListener metóda. Táto metóda má rovnaké parametre ako na metóda. Rozdiel je v tom, že táto metóda reaguje na udalosť ako prvá, bez ohľadu na čas, kedy ju zaregistrujete.

Napríklad:

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

myEmitter.prependListener("TestEvent", () => {
console.log("Najprv vykoná")
})

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

Keď sa vyššie uvedený blok kódu spustí, do konzoly sa najskôr prihlási „Spúšťa najprv“ a potom „TestEvent Emitted!!!“ bez ohľadu na to, v akom poradí ste ich zaregistrovali z dôvodu prependListener metóda.

Ak zaregistrujete niekoľko poslucháčov s prependListener spôsob, budú prebiehať v poradí od posledného po prvého.

Všimnite si usporiadanie vysielača a poslucháčov. Poslucháči prichádzajú vždy pred žiaričom. Toto usporiadanie je spôsobené tým, že poslucháči už musia počúvať udalosť predtým, ako ju vysielač vyšle.

Pre kontext zvážte blok kódu nižšie:

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

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

Ak spustíte blok kódu vyššie, nič sa nestane, pretože v čase, keď emitor vysielal udalosť, žiadny poslucháč nepočúval udalosť.

Raz počúvanie udalostí

V závislosti od vašich požiadaviek možno budete musieť spracovať niektoré udalosti iba raz v životnom cykle vašej aplikácie. Môžete to dosiahnuť pomocou EventEmitters raz metóda.

Táto metóda používa rovnaké argumenty ako na metóda a funguje podobne. Jediný rozdiel je v tom, že poslucháči sa zaregistrovali na raz počúvajte udalosť iba raz.

Napríklad:

myEmitter.once("SingleEvent", () => {
console.log("Udalosť spracovaná raz");
});

myEmitter.emit("SingleEvent"); // Udalosť spracovaná raz
myEmitter.emit("SingleEvent"); // Ignorované
myEmitter.emit("SingleEvent"); // Ignorované

Spustenie bloku kódu zaznamená „Udalosť spracovaná raz“ do konzoly iba raz, bez ohľadu na to, ako často emitor vysiela udalosť.

Poslucháči zaregistrovaní na raz spôsob reagovať na udalosť v poradí, v akom ich zaregistrujete. Toto správanie môžete zmeniť pomocou prependOnceListener metóda, ktorá funguje ako prependListener. Jediný rozdiel je v tom, že poslucháči sa zaregistrovali na raz počúvajte udalosť iba raz.

Riešenie chýb pomocou žiaričov udalostí

Mali by ste sa starať správne zaobchádzať s chybami JavaScriptu a poslucháči podujatí nie sú výnimkou. Neošetrené chyby z nich spôsobia ukončenie procesu Node.js a zlyhanie vašej aplikácie.

Na spracovanie chybovej udalosti ju musí mať aspoň jeden z poslucháčov udalosti EventName nastavený na chyba.

Napríklad:

myEmitter.on("chyba", (chyba) => {
konzoly.chyba(`Chyba: ${error}`);
});

Ak poslucháč spracuje potenciálnu chybu, ako je tomu v bloku kódu vyššie, aplikácia v prípade výskytu chyby zastaví zlyhanie.

Napríklad:

myEmitter.emit("chyba", nová chyba("Toto je chyba"));

Spustenie bloku kódu vyššie zaznamená do konzoly „Toto je chyba“, pretože chybové udalosti spracováva poslucháč.

Správa prijímačov udalostí

The EventEmitter trieda má niekoľko metód, ktoré vám umožňujú manipulovať a spravovať prijímače udalostí. Môžete získať poslucháčov udalosti, odstrániť ich a nastaviť maximálny počet poslucháčov pre udalosť.

Tu je tabuľka obsahujúca EventEmitter metódy, pomocou ktorých môžete manipulovať s poslucháčmi udalostí:

Metóda Argumenty Návratová hodnota
listenerCount eventName Vráti počet poslucháčov prihlásených na odber udalosti
poslucháčov eventName Vráti pole poslucháčov
removeListener eventName Odstráni aspoň jeden poslucháč zo zadaného eventName.
removeAllListeners eventName Odstráni všetkých poslucháčov pre zadaný eventName. Ak nešpecifikujete názov udalosti, toto volanie metódy odstráni všetkých poslucháčov pre EventEmitter.
setMaxListeners číslo Zmení predvolený maximálny počet poslucháčov na udalosť. Na označenie neobmedzeného počtu poslucháčov použite nekonečno alebo nulu. V predvolenom nastavení môžete na udalosť prihlásiť iba desať poslucháčov.

Tieto metódy môžete volať iba na EventEmitter príklad.

Napríklad:

myEmitter.removeListener("TestEvent");

Vyššie uvedený blok kódu odstraňuje jeden poslucháč pre TestEvent udalosť.

Význam žiaričov udalostí

Node.js preberá model programovania riadeného udalosťami s podporou vysielačov udalostí a poslucháčov. Programovanie riadené udalosťami je jedným z dôvodov, prečo sú programy Node.js rýchlejšie a priamočiarejšie ako niektoré alternatívy. Môžete jednoducho synchronizovať viacero udalostí, čo vedie k vyššej efektivite.