Sündmuste saatjad on NodeJS-i objektid, mis käivitavad sündmused, saates sõnumi, mis annab märku toimingu toimumisest.
Node.js pakub sisseehitatud sündmuste moodulit. See sisaldab sündmuste emitteri klassi, mis võimaldab teil luua ja hallata kohandatud sündmusi tagasihelistamise funktsioonide kaudu.
Siit saate teada, kuidas NodeJS-is sündmusi väljastada, sündmuste andmeid kuulata ja käsitleda ning sündmuste vigu käsitleda.
Sündmuste väljastamine
Sündmuste moodul on selle põhiosa Node.js serveripoolne keskkond. Seega ei pea te seda installima, vaid enne selle kasutamist Sündmuste tekitaja klassis, peate sündmuste moodulist importima ja selle instantseerima.
Nagu nii:
konst EventEmitter = nõuda("sündmused");
// EventEmitteri instantieerimine
konst minuEmitter = uus EventEmitter();
Sündmusi saate edastada kasutades Sündmuste tekitaja’s kiirgama meetod. The kiirgama meetod võtab an sündmuse nimi ja parameetritena suvaline arv argumente.
Kui helistate kiirgama meetodil, väljastab see läbitud sündmuse nimi
. Seejärel kutsub see sünkroonselt kõiki sündmuse kuulajaid teie registreerimisjärjekorras, edastades neile esitatud argumendid. Lõpuks naaseb tõsi kui üritusel oleks kuulajaid ja vale kui sellel poleks kuulajaid.Näiteks:
myEmitter.emit("TestEvent", "foo", "baar", 1, 2);
Ülaltoodud koodiplokis läbisite TestEvent kui Sündmuse nimi, ja "foo,” "baar,” 1ja 2 kui argumendid. Kui ülaltoodud koodiplokk töötab, teavitab see kõiki kuulajaid, kes seda kuulavad TestEvent sündmus. See helistab neile kuulajatele esitatud argumentidega.
Sündmuste kuulamine
Saate kuulata kiirgavaid sündmusi kasutades Sündmuste tekitaja’s peal meetod. The peal meetod võtab an Sündmuse nimi ja parameetritena tagasihelistamisfunktsioon. Kui sündmus koos Sündmuse nimi läks sisse peal meetod väljastatakse, kutsub see välja oma tagasihelistamise funktsiooni. See meetod tagastab viite Sündmuste tekitaja, mis võimaldab teil mitu kõnet aheldada.
Näiteks:
// Esimene kuulaja
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
}); // TestEvent Emitted!!!// Teine kuulaja
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
konsool.log(„Sündmus väljastati järgmiste argumentidega: ${args}`);
}); // Sündmus väljastati järgmiste argumentidega: foo, bar, 1, 2
myEmitter.emit("TestEvent", "foo", "baar", 1, 2);
Ülaltoodud koodiplokis, kui TestEvent sündmus väljastab, käivitavad sündmuse kuulajad oma tagasihelistamise funktsioonid. Kuulajad reageerivad teie registreerimisjärjekorras, mis tähendab, et "esimese kuulaja" tagasihelistamine toimub enne teist jne.
Saate seda käitumist muuta, kasutades Sündmuste tekitaja’s prependListener meetod. See meetod kasutab samu parameetreid, mis peal meetod. Erinevus seisneb selles, et see meetod reageerib sündmusele esimesena, olenemata sellest, millal te selle registreerite.
Näiteks:
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});myEmitter.prependListener("TestEvent", () => {
console.log("Täidab esimesena")
})
// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "baar", 1, 2);
Kui ülaltoodud koodiplokk käivitub, logitakse esmalt konsooli "Käivitab kõigepealt" ja seejärel "TestEvent Emitted!!!" olenemata sellest, millises järjekorras te need registreerisite, sest prependListener meetod.
Kui registreerite rakendusega mitu kuulajat prependListener meetodil, käitatakse neid järjekorras viimasest esimeseni.
Pange tähele emitteri ja kuulajate paigutust. Kuulajad tulevad alati emitteri ette. See paigutus tuleneb sellest, et kuulajad peavad sündmust juba kuulama enne, kui emitter selle välja annab.
Konteksti jaoks kaaluge allolevat koodiplokki:
myEmitter.emit("TestEvent", "foo", "baar", 1, 2);
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emitted!!!");
});
Kui käivitate ülaltoodud koodiploki, ei juhtu midagi, sest ajal, mil emitter sündmuse väljastas, ei kuulanud ükski kuulaja seda sündmust.
Üks kord sündmuste kuulamine
Olenevalt teie nõudmistest peate võib-olla mõnda sündmust oma rakenduse elutsükli jooksul käsitlema ainult üks kord. Seda saate saavutada kasutades Sündmuste tekitaja’s üks kord meetod.
See meetod kasutab samu argumente kui peal meetodil ja töötab sarnaselt. Ainus erinevus on see, et kuulajad registreerusid üks kord kuulata sündmust ainult üks kord.
Näiteks:
myEmitter.once("SingleEvent", () => {
console.log("Sündmust käsitleti üks kord");
});
myEmitter.emit("SingleEvent"); // Sündmust käsitleti üks kord
myEmitter.emit("SingleEvent"); // Eiratud
myEmitter.emit("SingleEvent"); // Eiratud
Koodiploki käivitamine logib konsooli ainult üks kord, olenemata sellest, kui sageli saatja sündmust väljastab.
Kuulajad registreerusid aadressil üks kord reageerivad sündmusele nende registreerimise järjekorras. Saate seda käitumist muuta, kasutades prependOnceListener meetod, mis töötab nagu prependListener. Ainus erinevus on see, et kuulajad registreerusid üks kord kuulata sündmust ainult üks kord.
Vigade käsitlemine sündmuste väljastajatega
Peaksite hoolitsema selle eest käsitleda JavaScripti vigu õigesti ja sündmuste kuulajad pole erand. Nende poolt tekitatud töötlemata vead põhjustavad protsessi Node.js väljumise ja teie rakenduse krahhi.
Veasündmuse käsitlemiseks peab vähemalt ühel sündmuse kuulajatest see olema Sündmuse nimi seatud viga.
Näiteks:
myEmitter.on("viga", (viga) => {
konsool.error(`Viga: ${error}`);
});
Kui kuulaja käsitleb potentsiaalset viga, nagu ülaltoodud koodiplokis, peatab rakenduse kokkujooksmine vea ilmnemisel.
Näiteks:
myEmitter.emit("viga", uus viga("See on viga"));
Ülaltoodud koodiploki käivitamine logib konsooli "See on viga", kuna kuulaja tegeleb veasündmustega.
Sündmuskuulajate haldamine
The Sündmuste tekitaja klassil on mitu meetodit, mis võimaldavad sündmuste kuulajaid manipuleerida ja hallata. Saate hankida sündmuse kuulajaid, neid eemaldada ja määrata sündmuse maksimaalse kuulajate arvu.
Siin on tabel, mis sisaldab Sündmuste tekitaja meetodid, mille abil saate sündmuste kuulajaid manipuleerida:
meetod | Argumendid | Tagastusväärtus |
---|---|---|
kuulajaCount | sündmuse nimi | Tagastab sündmuse tellitud kuulajate arvu |
kuulajaid | sündmuse nimi | Tagastab hulga kuulajaid |
eemaldaKuulaja | sündmuse nimi | Eemaldab vähemalt ühe kuulaja määratud sündmusestName. |
eemalda kõik kuulajad | sündmuse nimi | Eemaldab määratud sündmuseNimi kõik kuulajad. Kui te sündmuse nime ei määra, eemaldab see meetodi kutse kõik EventEmitteri kuulajad. |
setMaxListeners | number | Muudab vaikimisi maksimaalset kuulajate arvu sündmuse kohta. Kasutage lõpmatust või nulli, et näidata piiramatut arvu kuulajaid. Vaikimisi saate sündmusele tellida ainult kümme kuulajat. |
Neid meetodeid saate kutsuda ainult a Sündmuste tekitaja näiteks.
Näiteks:
myEmitter.removeListener("TestEvent");
Ülaltoodud koodiplokk eemaldab selle jaoks ühe kuulaja TestEvent sündmus.
Sündmuste edastajate tähtsus
Node.js võtab kasutusele sündmustepõhise programmeerimise paradigma, mis toetab sündmuste edastajaid ja kuulajaid. Sündmuspõhine programmeerimine on üks põhjusi, miks Node.js programmid on kiiremad ja lihtsamad kui mõned alternatiivid. Saate hõlpsasti sünkroonida mitut sündmust, mille tulemuseks on parem tõhusus.