Az eseménykibocsátók olyan objektumok a NodeJS-ben, amelyek eseményeket indítanak el egy üzenet küldésével, jelezve, hogy egy művelet megtörtént.
A Node.js beépített eseménymodult biztosít. Tartalmaz egy eseménykibocsátó osztályt, amely lehetővé teszi egyéni események létrehozását és kezelését visszahívási funkciókon keresztül.
Itt megtudhatja, hogyan lehet eseményeket kibocsátani, figyelni és kezelni az eseményadatokat, valamint hogyan kell kezelni az eseményhibákat a NodeJS-ben.
Események kibocsátása
Az események modul központi részét képezi a Node.js szerveroldali környezet. Így nem kell telepítenie, de használat előtt a EventEmitter osztályt, importálnia kell az események modulból, és példányosítania kell.
Például így:
const EventEmitter = igényelnek("események");
// Az EventEmitter példányosítása
const myEmitter = új EventEmitter();
Eseményeket küldhet ki a EventEmitter’s kibocsát módszer. A kibocsát módszer egy esemény neve és tetszőleges számú argumentum paraméterként.
Ha egyszer felhívod a
kibocsát módszerrel, kiadja az átadott esemény neve. Ezután szinkronosan meghívja az eseményfigyelőket a regisztrációs sorrendben, és mindegyiknek átadja a megadott argumentumokat. Végül visszatér igaz ha az eseménynek voltak hallgatói és hamis ha nem lennének hallgatói.Például:
myEmitter.emit("TestEvent", "foo", "rúd", 1, 2);
A fenti kódblokkban sikeres volt TestEvent mint a Esemény neve, és "fuu,” "rúd,” 1, és 2 mint az érvek. Amikor a fenti kódblokk lefut, értesíti az összes hallgatót, aki figyeli a kódot TestEvent esemény. Felhívja a hallgatókat a megadott érvekkel.
Események hallgatása
Meghallgathatja a kibocsátott eseményeket a EventEmitter’s tovább módszer. A tovább módszer egy Esemény neve és egy visszahívási függvény paraméterként. Amikor az esemény a Esemény neve átment a tovább metódus kiadásra kerül, akkor meghívja a visszahívási funkcióját. Ez a metódus hivatkozást ad vissza a EventEmitter, amely lehetővé teszi több hívás láncolását.
Például:
// Első hallgató
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emmitted!!!");
}); // TestEvent Emitted!!!// Második hallgató
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
konzol.log(`Az esemény a következő argumentumokkal lett kiadva: ${args}`);
}); // A következő argumentumokkal kibocsátott esemény: foo, bar, 1, 2
myEmitter.emit("TestEvent", "foo", "rúd", 1, 2);
A fenti kódblokkban, amikor a TestEvent esemény kibocsátása esetén az esemény figyelői meghívják visszahívási funkcióikat. A hallgatók abban a sorrendben reagálnak, ahogyan regisztráltad őket, vagyis az „első hallgató” visszahívása a második előtt fut, és így tovább.
Ezt a viselkedést a következővel módosíthatja EventEmitter’s prependListener módszer. Ez a módszer ugyanazokat a paramétereket veszi fel, mint a tovább módszer. A különbség az, hogy ez a módszer először reagál az eseményre, függetlenül attól, hogy mikor regisztrálja azt.
Például:
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emmitted!!!");
});myEmitter.prependListener("TestEvent", () => {
console.log("Először hajtja végre")
})
// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "rúd", 1, 2);
Amikor a fenti kódblokk lefut, először a „Végrehajtás először” kerül naplózásra a konzolon, majd a „TestEvent Emitted!!!” függetlenül attól, hogy milyen sorrendben regisztrálta őket, mert a prependListener módszer.
Ha több hallgatót regisztrál a prependListener módszerrel, sorrendben fognak futni az utolsótól az elsőig.
Vegye figyelembe az adó és a hallgatók elrendezését. A hallgatók mindig a kibocsátó előtt állnak. Ez az elrendezés azért van, mert a hallgatóknak már figyelniük kell az eseményt, mielőtt az emitter kibocsátja azt.
Kontextusként tekintse meg az alábbi kódblokkot:
myEmitter.emit("TestEvent", "foo", "rúd", 1, 2);
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emmitted!!!");
});
Ha futtatja a fenti kódblokkot, semmi sem történik, mert abban az időben, amikor az adó kibocsátotta az eseményt, egyetlen hallgató sem figyelte az eseményt.
Egyszeri események hallgatása
Igényeitől függően előfordulhat, hogy egyes eseményeket csak egyszer kell kezelnie az alkalmazás életciklusa során. Ezt a segítségével érheti el EventEmitter’s egyszer módszer.
Ez a módszer ugyanazokat az érveket veszi fel, mint a tovább módszerrel és hasonlóan működik. Az egyetlen különbség az, hogy a hallgatók regisztráltak a egyszer módszer csak egyszer figyelje meg az eseményt.
Például:
myEmitter.once("SingleEvent", () => {
console.log("Egyszer kezelt esemény");
});
myEmitter.emit("SingleEvent"); // Egyszer kezelt esemény
myEmitter.emit("SingleEvent"); // Figyelmen kívül hagyva
myEmitter.emit("SingleEvent"); // Figyelmen kívül hagyva
A kódblokk futtatása csak egyszer naplózza az „Eseményt egyszer kezelve” elemet a konzolon, függetlenül attól, hogy a kibocsátó milyen gyakran adja ki az eseményt.
A hallgatók regisztráltak a egyszer metódus reagál az eseményre a regisztráció sorrendjében. Ezt a viselkedést a következővel módosíthatja prependOnceListener módszer, amely úgy működik, mint prependListener. Az egyetlen különbség az, hogy a hallgatók regisztráltak a egyszer módszer csak egyszer figyelje meg az eseményt.
Eseménykibocsátókkal kapcsolatos hibák kezelése
Vigyáznod kell megfelelően kezelje a JavaScript hibákat és az eseményhallgatók sem kivételek. Az általuk okozott kezeletlen hibák a Node.js folyamat kilépését és az alkalmazás összeomlását okozzák.
Egy hibaesemény kezeléséhez legalább az egyik eseményfigyelőnek rendelkeznie kell vele Esemény neve állítva hiba.
Például:
myEmitter.on("hiba", (hiba) => {
konzol.hiba(`Hiba: ${error}`);
});
Ha a figyelő kezeli a potenciális hibát, mint a fenti kódblokkban, az leállítja az alkalmazás összeomlását hiba esetén.
Például:
myEmitter.emit("hiba", új hiba("Ez egy hiba"));
A fenti kódblokk futtatása „Ez egy hiba” üzenetet küld a konzolra, mert egy figyelő hibaeseményeket kezel.
Eseményfigyelők kezelése
A EventEmitter osztály számos módszerrel rendelkezik, amelyek lehetővé teszik az eseményfigyelők manipulálását és kezelését. Lekérheti egy esemény figyelőit, eltávolíthatja őket, és beállíthatja az esemény hallgatóinak maximális számát.
Itt van egy táblázat, amely tartalmazza EventEmitter módszerekkel manipulálhatja az eseményfigyelőket:
Módszer | Érvek | Visszatérési érték |
---|---|---|
hallgatóGróf | esemény neve | Az eseményre feliratkozott hallgatók számát adja vissza |
hallgatók | esemény neve | Visszaadja a hallgatók tömbjét |
RemoveListener | esemény neve | Eltávolít legalább egy figyelőt egy megadott eseménynévből. |
RemoveAllListeners | esemény neve | Eltávolítja a megadott eseményNév összes figyelőjét. Ha nem ad meg eseménynevet, ez a metódushívás eltávolítja az EventEmitter összes figyelőjét. |
setMaxListeners | szám | Módosítja az eseményenkénti hallgatók alapértelmezett maximális számát. Használja a végtelent vagy a nullát a korlátlan számú hallgató jelzésére. Alapértelmezés szerint egy eseményre csak tíz hallgatót irathat fel. |
Ezeket a módszereket csak egy EventEmitter példa.
Például:
myEmitter.removeListener("TestEvent");
A fenti kódblokk egyetlen figyelőt távolít el a TestEvent esemény.
Az eseménykibocsátók jelentősége
A Node.js átveszi az eseményvezérelt programozási paradigmát az eseménykibocsátók és -hallgatók támogatásával. Az eseményvezérelt programozás az egyik oka annak, hogy a Node.js programok gyorsabbak és egyszerűbbek, mint egyes alternatívák. Könnyedén szinkronizálhat több eseményt, ami jobb hatékonyságot eredményez.