Įvykių skleidėjai yra NodeJS objektai, kurie suaktyvina įvykius siųsdami pranešimą, kad signalizuotų, kad įvyko veiksmas.
Node.js suteikia integruotą įvykių modulį. Jame yra įvykių emiterio klasė, leidžianti kurti ir tvarkyti pasirinktinius įvykius naudojant atgalinio skambinimo funkcijas.
Čia sužinosite, kaip siųsti įvykius, klausytis ir tvarkyti įvykių duomenis bei tvarkyti įvykių klaidas NodeJS.
Įvykių išleidimas
Renginių modulis yra pagrindinė dalis serverio pusės Node.js aplinka. Taigi, jums nereikia jo įdiegti, bet prieš naudodami EventEmitter klasėje, turite importuoti iš įvykių modulio ir jį sukurti.
Kaip taip:
konst EventEmitter = reikalauti(„įvykiai“);
// Įvykio skleidėjo egzistavimas
konst myEmitter = naujas EventEmitter();
Galite skleisti įvykius naudodami EventEmitter’s skleisti metodas. The skleisti metodas reikalauja an įvykio pavadinimas ir savavališkas skaičius argumentų kaip parametrai.
Kai tik paskambinsite skleisti metodu, jis skleidžia pas įvykio pavadinimas. Tada jis sinchroniškai iškviečia kiekvieną įvykio klausytoją tokia tvarka, kokia juos užregistravote, kiekvienam perduodant pateiktus argumentus. Pagaliau grįžta
tiesa jei renginyje būtų klausytojų ir klaidinga jei ji neturėtų klausytojų.Pavyzdžiui:
myEmitter.emit("TestEvent", "foo", "baras", 1, 2);
Aukščiau esančiame kodo bloke išlaikėte TestEvent kaip ir Įvykio pavadinimas, ir "foo,” "baras,” 1, ir 2 kaip argumentai. Kai bus paleistas aukščiau pateiktas kodo blokas, jis praneš visiems klausytojams, kurie klausosi TestEvent įvykis. Tai paskambins tiems klausytojams su pateiktais argumentais.
Įvykių klausymas
Galite klausytis skleidžiamų įvykių naudodami EventEmitter’s įjungta metodas. The įjungta metodas reikalauja an Įvykio pavadinimas ir atgalinio skambinimo funkcija kaip parametrai. Kai renginys su Įvykio pavadinimas perėjo į įjungta metodas, jis iškviečia atgalinio skambinimo funkciją. Šis metodas grąžina nuorodą į EventEmitter, leidžianti sujungti kelis skambučius.
Pavyzdžiui:
// Pirmasis klausytojas
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
}); // TestEvent Emitted!!!// Antrasis klausytojas
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
konsolė.log(„Įvykis paskelbtas šiais argumentais: ${args}`);
}); // Įvykis išduodamas šiais argumentais: foo, bar, 1, 2
myEmitter.emit("TestEvent", "foo", "baras", 1, 2);
Aukščiau esančiame kodo bloke, kai TestEvent įvykis skleidžia, įvykio klausytojai iškvies savo atgalinio ryšio funkcijas. Klausytojai reaguos tokia tvarka, kokia juos užregistravote, tai reiškia, kad „pirmojo klausytojo“ atgalinis skambutis vyks anksčiau nei antrasis ir pan.
Šį elgesį galite pakeisti naudodami EventEmitter’s prependListener metodas. Šis metodas naudoja tuos pačius parametrus kaip ir įjungta metodas. Skirtumas tas, kad šis metodas pirmiausia reaguoja į įvykį, nepaisant to, kada jį užregistruojate.
Pavyzdžiui:
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});myEmitter.prependListener("TestEvent", () => {
console.log("Vykdo pirmas")
})
// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "baras", 1, 2);
Kai vykdomas aukščiau pateiktas kodo blokas, konsolėje pirmiausia bus užregistruota „Vykdo pirmiausia“, o po to „TestEvent Emitted!!!“ nepriklausomai nuo to, kokia tvarka juos užregistravote, nes prependListener metodas.
Jei registruojate kelis klausytojus prependListener metodu, jie bus vykdomi eilės tvarka nuo paskutinio iki pirmojo.
Atkreipkite dėmesį į emiterio ir klausytojų išdėstymą. Klausytojai visada ateina prieš emiterį. Toks išdėstymas yra todėl, kad klausytojai jau turi klausytis įvykio, kol emiteris jį išskleis.
Dėl konteksto apsvarstykite toliau pateiktą kodo bloką:
myEmitter.emit("TestEvent", "foo", "baras", 1, 2);
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});
Jei paleisite aukščiau pateiktą kodo bloką, nieko neįvyks, nes tuo metu, kai emitentas išsiuntė įvykį, joks klausytojas neklausė įvykio.
Vieną kartą klausytis įvykių
Atsižvelgiant į jūsų reikalavimus, kai kuriuos įvykius gali tekti tvarkyti tik vieną kartą per programos gyvavimo ciklą. Tai galite pasiekti naudodami EventEmitter’s kartą metodas.
Šis metodas remiasi tuos pačius argumentus kaip ir įjungta metodas ir veikia panašiai. Vienintelis skirtumas yra tas, kad klausytojai užsiregistravo kartą metodas klausykite įvykio tik vieną kartą.
Pavyzdžiui:
myEmitter.once("SingleEvent", () => {
console.log("Renginys tvarkomas vieną kartą");
});
myEmitter.emit("SingleEvent"); // Įvykis tvarkomas vieną kartą
myEmitter.emit("SingleEvent"); // Ignoruojamas
myEmitter.emit("SingleEvent"); // Ignoruojamas
Vykdant kodo bloką „Įvykis apdorotas vieną kartą“ konsolėje bus registruojamas tik vieną kartą, neatsižvelgiant į tai, kaip dažnai siuntėjas skleidžia įvykį.
Klausytojai užsiregistravo kartą metodas reaguoti į įvykį tokia tvarka, kokia juos registruojate. Šį elgesį galite pakeisti naudodami prependOnceListener metodas, kuris veikia kaip prependListener. Vienintelis skirtumas yra tas, kad klausytojai užsiregistravo kartą metodas klausykite įvykio tik vieną kartą.
Klaidų tvarkymas naudojant įvykių siųstuvus
Turėtumėte pasirūpinti tinkamai tvarkyti JavaScript klaidas ir įvykių klausytojai nėra išimtis. Dėl jų neapdorotų klaidų Node.js procesas bus baigtas, o jūsų programa sugenda.
Kad būtų galima apdoroti klaidos įvykį, bent vienas iš įvykio klausytojų turi jį turėti Įvykio pavadinimas nustatytas į klaida.
Pavyzdžiui:
myEmitter.on("klaida", (klaida) => {
konsolė.error(` Klaida: ${error}`);
});
Jei klausytojas apdoros galimą klaidą, kaip nurodyta aukščiau esančiame kodo bloke, programa neleis strigti, kai įvyks klaida.
Pavyzdžiui:
myEmitter.emit("klaida", nauja klaida ("Tai klaida"));
Vykdant aukščiau pateiktą kodo bloką, konsolėje bus užregistruotas pranešimas „Tai klaida“, nes klausytojas tvarko klaidų įvykius.
Įvykių klausytojų valdymas
The EventEmitter klasėje yra keli metodai, leidžiantys manipuliuoti ir valdyti įvykių klausytojus. Galite gauti įvykio klausytojus, juos pašalinti ir nustatyti didžiausią įvykio klausytojų skaičių.
Čia yra lentelė, kurioje yra EventEmitter būdai, kuriais galite manipuliuoti įvykių klausytojais:
Metodas | Argumentai | Grąžinimo vertė |
---|---|---|
klausytojasCount | įvykio pavadinimas | Grąžina klausytojų, užsiprenumeravusių įvykį, skaičių |
klausytojai | įvykio pavadinimas | Grąžina daugybę klausytojų |
pašalinti klausytoją | įvykio pavadinimas | Pašalina bent vieną klausytoją iš nurodyto įvykioName. |
pašalinti visus klausytojus | įvykio pavadinimas | Pašalina visus nurodyto įvykioName klausytojus. Jei nenurodysite įvykio pavadinimo, šis metodo iškvietimas pašalins visus EventEmitter klausytojus. |
setMaxListeners | numerį | Pakeičiamas numatytasis maksimalus klausytojų skaičius vienam įvykiui. Norėdami nurodyti neribotą klausytojų skaičių, naudokite begalybę arba nulį. Pagal numatytuosius nustatymus įvykiui galite prenumeruoti tik dešimt klausytojų. |
Šiuos metodus galite iškviesti tik ant EventEmitter instancija.
Pavyzdžiui:
myEmitter.removeListener("TestEvent");
Aukščiau pateiktas kodo blokas pašalina vieną klausytoją TestEvent įvykis.
Įvykių skleidėjų svarba
Node.js priima įvykiais pagrįstą programavimo paradigmą, palaikydama įvykių skleidėjus ir klausytojus. Įvykiais pagrįstas programavimas yra viena iš priežasčių, kodėl Node.js programos yra greitesnės ir paprastesnės nei kai kurios alternatyvos. Galite lengvai sinchronizuoti kelis įvykius, todėl padidėja efektyvumas.