Tapahtuman lähettäjät ovat NodeJS: n objekteja, jotka laukaisevat tapahtumia lähettämällä viestin, joka ilmoittaa toiminnon tapahtumisesta.

Node.js tarjoaa sisäänrakennetun tapahtumamoduulin. Se sisältää tapahtuman lähettäjäluokan, jonka avulla voit luoda ja käsitellä mukautettuja tapahtumia takaisinsoittotoimintojen kautta.

Täällä opit lähettämään tapahtumia, kuuntelemaan ja käsittelemään tapahtumatietoja sekä käsittelemään tapahtumavirheitä NodeJS: ssä.

Tapahtumien lähettäminen

Tapahtumamoduuli on keskeinen osa Node.js-palvelinpuolen ympäristö. Sinun ei siis tarvitse asentaa sitä, mutta ennen käyttöä EventEmitter luokassa, sinun on tuotava tapahtumamoduulista ja instantoitava se.

Niin kuin:

konst EventEmitter = vaatia("Tapahtumat");

// EventEmitterin instantiating
konst myEmitter = Uusi EventEmitter();

Voit lähettää tapahtumia käyttämällä EventEmitter's säteillä menetelmä. The säteillä menetelmä vie an tapahtuman nimi ja mielivaltainen määrä argumentteja parametreina.

Kun soitat säteillä menetelmällä se lähettää hyväksytyn

instagram viewer
tapahtuman nimi. Sitten se kutsuu synkronisesti jokaista tapahtuman kuuntelijaa rekisteröimisjärjestyksessä ja välittää toimitetut argumentit kullekin. Lopulta se palaa totta jos tapahtumalla olisi kuulijoita ja väärä jos sillä ei olisi kuuntelijaa.

Esimerkiksi:

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

Yllä olevassa koodilohkossa läpäisit TestEvent kuin Tapahtuman nimi, ja "foo,” "baari,” 1, ja 2 kuin argumentit. Kun yllä oleva koodilohko suoritetaan, se ilmoittaa kaikille kuuntelijoille, jotka kuuntelevat koodia TestEvent tapahtuma. Se soittaa niille kuulijoille annetuilla argumenteilla.

Tapahtumien kuuntelu

Voit kuunnella lähetettyjä tapahtumia käyttämällä EventEmitter's päällä menetelmä. The päällä menetelmä vie an Tapahtuman nimi ja takaisinsoittotoiminto parametreina. Kun tapahtuman kanssa Tapahtuman nimi siirtyi sisään päällä menetelmä lähetetään, se kutsuu takaisinsoittotoimintonsa. Tämä menetelmä palauttaa viittauksen EventEmitter, jolloin voit ketjuttaa useita puheluita.

Esimerkiksi:

// Ensimmäinen kuuntelija
myEmitter.on("TestEvent", () => {
console.log("Testitapahtuma lähetetty!!!");
}); // TestEvent Emitted!!!

// Toinen kuuntelija
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
konsoli.Hirsi("Tapahtuma lähetetään seuraavilla argumenteilla: ${args}`);
}); // Tapahtuma lähetetään seuraavilla argumenteilla: foo, bar, 1, 2

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

Yllä olevassa koodilohkossa, kun TestEvent tapahtuma lähettää, tapahtuman kuuntelijat kutsuvat takaisinsoittotoimintojaan. Kuuntelijat reagoivat siinä järjestyksessä kuin rekisteröit heidät, mikä tarkoittaa, että "ensimmäisen kuuntelijan" takaisinsoitto suoritetaan ennen toista ja niin edelleen.

Voit muuttaa tätä toimintaa käyttämällä EventEmitter's prependListener menetelmä. Tämä menetelmä ottaa samat parametrit kuin päällä menetelmä. Erona on, että tämä menetelmä reagoi tapahtumaan ensin riippumatta siitä, milloin rekisteröit sen.

Esimerkiksi:

myEmitter.on("TestEvent", () => {
console.log("Testitapahtuma lähetetty!!!");
});

myEmitter.prependListener("TestEvent", () => {
console.log("Suorittaa ensimmäisenä")
})

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

Kun yllä oleva koodilohko suoritetaan, "Executes first" kirjataan ensin konsoliin ja sen jälkeen "TestEvent Emmitd!!!" riippumatta siitä, missä järjestyksessä olet rekisteröinyt ne, koska prependListener menetelmä.

Jos rekisteröit useita kuuntelijoita prependListener menetelmällä, ne suoritetaan järjestyksessä viimeisestä ensimmäiseen.

Huomaa lähettäjän ja kuuntelijoiden järjestely. Kuuntelijat tulevat aina lähettäjän edelle. Tämä järjestely johtuu siitä, että kuuntelijoiden täytyy jo kuunnella tapahtumaa ennen kuin emitteri lähettää sen.

Tarkastele kontekstia alla olevaa koodilohkoa:

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

myEmitter.on("TestEvent", () => {
console.log("Testitapahtuma lähetetty!!!");
});

Jos suoritat yllä olevan koodilohkon, mitään ei tapahdu, koska silloin, kun lähettäjä lähetti tapahtuman, kukaan kuuntelija ei kuunnellut tapahtumaa.

Kerran tapahtumien kuuntelu

Vaatimuksistasi riippuen saatat joutua käsittelemään joitain tapahtumia vain kerran sovelluksesi elinkaaren aikana. Voit saavuttaa tämän käyttämällä EventEmitter's kerran menetelmä.

Tämä menetelmä käyttää samat argumentit kuin päällä menetelmällä ja toimii samalla tavalla. Ainoa ero on, että kuuntelijat rekisteröityivät kerran menetelmä kuunnella tapahtumaa vain kerran.

Esimerkiksi:

myEmitter.once("SingleEvent", () => {
console.log("Tapahtuma käsitelty kerran");
});

myEmitter.emit("SingleEvent"); // Tapahtuma käsitelty kerran
myEmitter.emit("SingleEvent"); // Ohitettu
myEmitter.emit("SingleEvent"); // Ohitettu

Koodilohkon suorittaminen kirjaa "Tapahtuma käsitelty kerran" vain kerran konsoliin riippumatta siitä, kuinka usein lähettäjä lähettää tapahtuman.

Kuuntelijat rekisteröityneet kerran menetelmä reagoi tapahtumaan siinä järjestyksessä, jossa rekisteröit ne. Voit muuttaa tätä toimintaa käyttämällä prependOnceListener menetelmä, joka toimii kuten prependListener. Ainoa ero on, että kuuntelijat rekisteröityivät kerran menetelmä kuunnella tapahtumaa vain kerran.

Tapahtumalähettimien virheiden käsittely

Sinun pitäisi huolehtia käsittele JavaScript-virheet oikein ja tapahtumakuuntelijat eivät ole poikkeus. Niiden käsittelemättömät virheet aiheuttavat Node.js-prosessin sulkemisen ja sovelluksesi kaatumisen.

Virhetapahtuman käsittelemiseksi vähintään yhdellä tapahtuman kuuntelijoista on oltava oma Tapahtuman nimi asetettu virhe.

Esimerkiksi:

myEmitter.on("virhe", (virhe) => {
konsoli.virhe(`Virhe: ${error}`);
});

Kun kuuntelija käsittelee mahdollisen virheen, kuten yllä olevassa koodilohkossa, estää sovellusta kaatumasta virheen ilmetessä.

Esimerkiksi:

myEmitter.emit("virhe", uusi virhe("Tämä on virhe"));

Yllä olevan koodilohkon suorittaminen kirjaa "Tämä on virhe" konsoliin, koska kuuntelija käsittelee virhetapahtumia.

Tapahtumien kuuntelijoiden hallinta

The EventEmitter luokassa on useita menetelmiä, joiden avulla voit manipuloida ja hallita tapahtumakuuntelijoita. Voit saada tapahtuman kuuntelijoita, poistaa niitä ja asettaa tapahtuman kuuntelijoiden enimmäismäärän.

Tässä on taulukko, joka sisältää EventEmitter menetelmiä, joilla voit manipuloida tapahtumaseuraajia:

Menetelmä Argumentit Palautusarvo
kuuntelijaCount tapahtuman nimi Palauttaa tapahtuman tilaaneiden kuuntelijoiden määrän
kuulijoita tapahtuman nimi Palauttaa joukon kuuntelijoita
poistaListener tapahtuman nimi Poistaa vähintään yhden kuuntelijan määritetystä tapahtumastaName.
poistaAllListeners tapahtuman nimi Poistaa kaikki kuuntelijat tietyltä tapahtumanNimi. Jos et määritä tapahtuman nimeä, tämä menetelmäkutsu poistaa kaikki EventEmitterin kuuntelijat.
setMaxListeners määrä Muuttaa oletusarvoista kuuntelijoiden enimmäismäärää tapahtumaa kohden. Käytä ääretöntä tai nollaa rajattoman kuuntelijamäärän osoittamiseen. Oletuksena voit tilata tapahtumaan vain kymmenen kuuntelijaa.

Voit kutsua näitä menetelmiä vain EventEmitter ilmentymä.

Esimerkiksi:

myEmitter.removeListener("TestEvent");

Yllä oleva koodilohko poistaa yhden kuuntelijan TestEvent tapahtuma.

Tapahtuman lähettäjien merkitys

Node.js ottaa käyttöön tapahtumaohjatun ohjelmoinnin paradigman ja tukee tapahtuman lähettäjiä ja kuuntelijoita. Tapahtumapohjainen ohjelmointi on yksi syy, miksi Node.js-ohjelmat ovat nopeampia ja yksinkertaisempia kuin jotkut vaihtoehdot. Voit helposti synkronoida useita tapahtumia, mikä parantaa tehokkuutta.