Emitory událostí jsou objekty v NodeJS, které spouštějí události odesláním zprávy signalizující, že došlo k akci.

Node.js poskytuje vestavěný modul událostí. Obsahuje třídu emitoru událostí, která vám umožňuje vytvářet a zpracovávat vlastní události pomocí funkcí zpětného volání.

Zde se dozvíte, jak vysílat události, naslouchat a zpracovávat data událostí a zpracovávat chyby událostí v NodeJS.

Vysílání událostí

Modul událostí je hlavní součástí prostředí Node.js na straně serveru. Tudíž jej nemusíte instalovat, ale před použitím EventEmitter třídy, musíte importovat z modulu událostí a vytvořit jeho instanci.

Jako tak:

konst EventEmitter = vyžadovat("Události");

// Instanciating EventEmitter
konst myEmitter = Nový EventEmitter();

Události můžete vysílat pomocí EventEmitters vysílat metoda. The vysílat metoda trvá an název události a libovolný počet argumentů jako parametrů.

Jakmile zavoláte vysílat způsob, vysílá předané název události. Potom synchronně volá všechny posluchače události v pořadí, v jakém jste je zaregistrovali, a každému předá dodané argumenty. Nakonec se to vrací

instagram viewer
skutečný kdyby akce měla posluchače a Nepravdivé kdyby to nemělo žádné posluchače.

Například:

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

Ve výše uvedeném bloku kódu jste prošli TestEvent jako Název události, a "foo,” "bar,” 1, a 2 jako argumenty. Když se výše uvedený blok kódu spustí, upozorní všechny posluchače, kteří poslouchají TestEvent událost. Zavolá ty posluchače s danými argumenty.

Poslouchání událostí

Vysílané události můžete poslouchat pomocí EventEmitters na metoda. The na metoda trvá an Název události a funkci zpětného volání jako parametry. Když se akce s Název události přešel do na je emitována, vyvolá svou funkci zpětného volání. Tato metoda vrací odkaz na EventEmitter, což vám umožní řetězit více hovorů.

Například:

// První posluchač
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emited!!!");
}); // TestEvent Emited!!!

// Druhý posluchač
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
řídicí panel.log(`Událost vygenerovaná s následujícími argumenty: ${args}`);
}); // Událost vygenerovaná s následujícími argumenty: foo, bar, 1, 2

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

V bloku kódu výše, když TestEvent událost emituje, posluchači události vyvolají své funkce zpětného volání. Posluchači budou reagovat v pořadí, v jakém jste je zaregistrovali, což znamená, že zpětné volání „prvního posluchače“ proběhne před druhým atd.

Toto chování můžete změnit pomocí EventEmitters prependListener metoda. Tato metoda má stejné parametry jako na metoda. Rozdíl je v tom, že tato metoda reaguje na událost jako první, bez ohledu na čas, kdy ji zaregistrujete.

Například:

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

myEmitter.prependListener("TestEvent", () => {
console.log("Provede jako první")
})

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

Když se výše uvedený blok kódu spustí, do konzole se nejprve zaprotokoluje „Spustí jako první“ a poté „TestEvent Emitted!!!“ bez ohledu na pořadí, ve kterém jste je zaregistrovali z důvodu prependListener metoda.

Pokud zaregistrujete několik posluchačů s prependListener budou probíhat v pořadí od posledního k prvnímu.

Všimněte si uspořádání vysílače a posluchačů. Posluchači vždy přicházejí před emitorem. Toto uspořádání je způsobeno tím, že posluchači již musí naslouchat události, než ji emitor vyšle.

Pro kontext zvažte následující blok kódu:

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

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

Pokud spustíte blok kódu výše, nic se nestane, protože v době, kdy emitor vyslal událost, žádný posluchač událost neposlouchal.

Poslech událostí jednou

V závislosti na vašich požadavcích možná budete muset zpracovat některé události pouze jednou v životním cyklu vaší aplikace. Toho můžete dosáhnout pomocí EventEmitters jednou metoda.

Tato metoda používá stejné argumenty jako na metoda a funguje podobně. Jediný rozdíl je v tom, že se posluchači zaregistrovali u jednou metoda poslouchejte událost pouze jednou.

Například:

myEmitter.once("SingleEvent", () => {
console.log("Událost řešena jednou");
});

myEmitter.emit("SingleEvent"); // Událost zpracovaná jednou
myEmitter.emit("SingleEvent"); // Ignorováno
myEmitter.emit("SingleEvent"); // Ignorováno

Spuštěním bloku kódu se „Událost zpracovaná jednou“ zaznamená do konzole pouze jednou, bez ohledu na to, jak často emitor událost vysílá.

Posluchači registrovaní u jednou způsob reagovat na událost v pořadí, v jakém je zaregistrujete. Toto chování můžete změnit pomocí prependOnceListener metoda, která funguje jako prependListener. Jediný rozdíl je v tom, že se posluchači zaregistrovali u jednou metoda poslouchejte událost pouze jednou.

Zpracování chyb s emitory událostí

Měli byste se postarat správně zacházet s chybami JavaScriptu a posluchači událostí nejsou výjimkou. Neošetřené chyby způsobí ukončení procesu Node.js a pád vaší aplikace.

Aby bylo možné zpracovat chybovou událost, musí ji mít alespoň jeden z posluchačů události Název události nastaven na chyba.

Například:

myEmitter.on("chyba", (chyba) => {
řídicí panel.chyba(`Chyba: ${error}`);
});

Pokud necháte posluchače zpracovat potenciální chybu, jako v bloku kódu výše, zabráníte tomu, aby se aplikace zhroutila, když dojde k chybě.

Například:

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

Spuštěním výše uvedeného bloku kódu se do konzole zaznamená „Toto je chyba“, protože posluchač zpracovává chybové události.

Správa posluchačů událostí

The EventEmitter třída má několik metod, které vám umožňují manipulovat a spravovat posluchače událostí. Můžete získat posluchače události, odebrat je a nastavit maximální počet posluchačů pro událost.

Zde je tabulka obsahující EventEmitter metody, kterými můžete manipulovat s posluchači událostí:

Metoda Argumenty Návratová hodnota
listenerCount název události Vrátí počet posluchačů přihlášených k odběru události
posluchači název události Vrátí pole posluchačů
removeListener název události Odebere alespoň jeden posluchač ze zadaného eventName.
removeAllListeners název události Odebere všechny posluchače pro zadaný eventName. Pokud nezadáte název události, toto volání metody odstraní všechny posluchače pro EventEmitter.
setMaxListeners číslo Změní výchozí maximální počet posluchačů na událost. K označení neomezeného počtu posluchačů použijte nekonečno nebo nulu. Ve výchozím nastavení můžete k události přihlásit pouze deset posluchačů.

Tyto metody můžete volat pouze na EventEmitter instance.

Například:

myEmitter.removeListener("TestEvent");

Blok kódu výše odebere jeden posluchač pro TestEvent událost.

Význam emitorů událostí

Node.js přebírá paradigma programování řízeného událostmi s podporou emitorů událostí a posluchačů. Programování řízené událostmi je jedním z důvodů, proč jsou programy Node.js rychlejší a přímočařejší než některé alternativy. Můžete snadno synchronizovat více událostí, což má za následek vyšší efektivitu.