Notikumu emitētāji ir objekti NodeJS, kas aktivizē notikumus, nosūtot ziņojumu, lai signalizētu, ka ir notikusi darbība.

Node.js nodrošina iebūvētu notikumu moduli. Tajā ir ietverta notikumu emitenta klase, kas ļauj izveidot un apstrādāt pielāgotus notikumus, izmantojot atzvanīšanas funkcijas.

Šeit jūs uzzināsit, kā nosūtīt notikumus, klausīties un apstrādāt notikumu datus, kā arī apstrādāt notikumu kļūdas pakalpojumā NodeJS.

Notikumu izdošana

Pasākumu modulis ir tā galvenā sastāvdaļa Node.js servera puses vide. Tādējādi jums tas nav jāinstalē, bet pirms lietošanas EventEmitter klasē, jums ir jāimportē no notikumu moduļa un jāinstantiģē.

Tā kā:

konst EventEmitter = pieprasīt("pasākumi");

// EventEmitter instantiation
konst myEmitter = jauns EventEmitter();

Varat izstarot notikumus, izmantojot EventEmitter’s izstaro metodi. The izstaro metode aizņem an notikuma nosaukums un patvaļīgs skaits argumentu kā parametri.

Kad esat piezvanījis uz izstaro metodi, tas izstaro pag notikuma nosaukums. Pēc tam tas sinhroni izsauc katru no notikuma klausītājiem tādā secībā, kādā tos reģistrējāt, katram nododot sniegtos argumentus. Visbeidzot, tas atgriežas

instagram viewer
taisnība ja pasākumā būtu klausītāji un viltus ja tam nebūtu klausītāju.

Piemēram:

myEmitter.emit("TestEvent", "foo", "bārs", 1, 2);

Iepriekš esošajā koda blokā jūs izturējāt TestEventNotikuma nosaukums, un "foo,” "bārs,” 1, un 2 kā argumenti. Kad koda bloks darbojas iepriekš, tas informēs visus klausītājus, kuri klausās TestEvent notikumu. Tā piezvanīs tiem klausītājiem ar dotajiem argumentiem.

Notikumu klausīšanās

Varat klausīties raidītos notikumus, izmantojot EventEmitter’s ieslēgts metodi. The ieslēgts metode aizņem an Notikuma nosaukums un atzvanīšanas funkcija kā parametri. Kad pasākums ar Notikuma nosaukums iegāja iekšā ieslēgts metode tiek izvadīta, tā izsauc savu atzvanīšanas funkciju. Šī metode atgriež atsauci uz EventEmitter, kas ļauj ķēdītē vairākus zvanus.

Piemēram:

// Pirmais klausītājs
myEmitter.on("TestEvent", () => {
console.log("TestEvent Emmited!!!");
}); // TestEvent Emmited!!!

// Otrais klausītājs
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
konsole.log(`Notikums tika izvadīts ar šādiem argumentiem: ${args}`);
}); // Notikums emitēts ar šādiem argumentiem: foo, bar, 1, 2

myEmitter.emit("TestEvent", "foo", "bārs", 1, 2);

Iepriekš esošajā koda blokā, kad TestEvent notikumu izstaro, notikuma klausītāji izsauks savas atzvanīšanas funkcijas. Klausītāji reaģēs tādā secībā, kādā jūs tos reģistrējāt, tas nozīmē, ka “pirmā klausītāja” atzvanīšana tiks veikta pirms otrā utt.

Varat mainīt šo darbību, izmantojot EventEmitter’s prependListener metodi. Šī metode izmanto tādus pašus parametrus kā ieslēgts metodi. Atšķirība ir tāda, ka šī metode vispirms reaģē uz notikumu neatkarīgi no tā reģistrēšanas laika.

Piemēram:

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

myEmitter.prependListener("TestEvent", () => {
console.log("Izpilda pirmais")
})

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

Kad tiek izpildīts iepriekš minētais koda bloks, konsolē vispirms tiks reģistrēts “Izpilda pirmais”, pēc tam “TestEvent Emmited!!!” neatkarīgi no pasūtījuma, kādā tos reģistrējāt, jo prependListener metodi.

Ja reģistrējat vairākus klausītājus ar prependListener metodi, tie darbosies secībā no pēdējās līdz pirmajam.

Ievērojiet emitētāja un klausītāju izvietojumu. Klausītāji vienmēr nāk pirms emitētāja. Šis izkārtojums ir tāpēc, ka klausītājiem jau ir jāklausās notikumam, pirms emitētājs to izstaro.

Kontekstam apsveriet tālāk norādīto koda bloku.

myEmitter.emit("TestEvent", "foo", "bārs", 1, 2);

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

Ja palaižat iepriekš norādīto koda bloku, nekas nenotiek, jo brīdī, kad emitents izstaroja notikumu, neviens klausītājs to neklausījās.

Vienreiz klausoties notikumus

Atkarībā no jūsu prasībām daži notikumi, iespējams, būs jāapstrādā tikai vienu reizi savas lietojumprogrammas dzīves cikla laikā. To var panākt, izmantojot EventEmitter’s vienreiz metodi.

Šī metode izmanto tos pašus argumentus kā ieslēgts metodi un darbojas līdzīgi. Vienīgā atšķirība ir tā, ka klausītāji reģistrējās ar vienreiz metode klausieties notikumu tikai vienu reizi.

Piemēram:

myEmitter.once("SingleEvent", () => {
console.log("Pasākums apstrādāts vienu reizi");
});

myEmitter.emit("SingleEvent"); // Notikums apstrādāts vienreiz
myEmitter.emit("SingleEvent"); // Ignorēts
myEmitter.emit("SingleEvent"); // Ignorēts

Palaižot kodu bloku, konsolē tiks reģistrēts tikai vienreizējs notikums, neatkarīgi no tā, cik bieži emitents izstaro notikumu.

Klausītāji reģistrēti ar vienreiz metode reaģē uz notikumu tādā secībā, kādā tos reģistrējat. Varat mainīt šo darbību, izmantojot prependOnceListener metode, kas darbojas līdzīgi prependListener. Vienīgā atšķirība ir tā, ka klausītāji reģistrējās ar vienreiz metode klausieties notikumu tikai vienu reizi.

Kļūdu apstrāde ar notikumu raidītājiem

Jums vajadzētu rūpēties par pareizi apstrādājiet JavaScript kļūdas un notikumu klausītāji nav izņēmums. To neapstrādāto kļūdu dēļ Node.js process tiks aizvērts un jūsu lietojumprogramma avarēs.

Lai apstrādātu kļūdas notikumu, tam ir jābūt vismaz vienam no notikuma klausītājiem Notikuma nosaukums iestatīts uz kļūda.

Piemēram:

myEmitter.on("kļūda", (kļūda) => {
konsole.error(`Kļūda: ${error}`);
});

Ja uztvērējs apstrādā potenciālu kļūdu, piemēram, koda blokā iepriekš, kļūdas gadījumā lietojumprogramma netiks avarēta.

Piemēram:

myEmitter.emit("kļūda", jauna kļūda("Tā ir kļūda"));

Palaižot iepriekš minēto koda bloku, konsolē tiks reģistrēts ziņojums “Šī ir kļūda”, jo klausītājs apstrādā kļūdu notikumus.

Notikumu klausītāju pārvaldība

The EventEmitter klasei ir vairākas metodes, kas ļauj manipulēt un pārvaldīt notikumu klausītājus. Varat iegūt notikuma klausītājus, noņemt tos un iestatīt maksimālo notikuma klausītāju skaitu.

Šeit ir tabula, kas satur EventEmitter metodes, ar kurām varat manipulēt ar notikumu klausītājiem:

Metode Argumenti Atdeves vērtība
klausītājsCount notikuma nosaukums Atgriež pasākuma abonēto klausītāju skaitu
klausītāji notikuma nosaukums Atgriež klausītāju masīvu
noņemtKlausītājs notikuma nosaukums Noņem vismaz vienu klausītāju no norādītā notikumaName.
noņemt visus klausītājus notikuma nosaukums Noņem visus klausītājus norādītajam notikuma nosaukums. Ja nenorādīsiet notikuma nosaukumu, šis metodes izsaukums noņems visus EventEmitter klausītājus.
setMaxListeners numuru Maina noklusējuma maksimālo klausītāju skaitu vienam notikumam. Izmantojiet bezgalību vai nulli, lai norādītu neierobežotu klausītāju skaitu. Pēc noklusējuma pasākumam var abonēt tikai desmit klausītājus.

Šīs metodes var izsaukt tikai uz EventEmitter piemēram.

Piemēram:

myEmitter.removeListener("TestEvent");

Iepriekš minētais koda bloks noņem vienu klausītāju TestEvent notikumu.

Notikumu raidītāju nozīme

Node.js izmanto uz notikumu orientētu programmēšanas paradigmu ar tās atbalstu notikumu emitētājiem un klausītājiem. Uz notikumiem balstīta programmēšana ir viens no iemesliem, kāpēc Node.js programmas ir ātrākas un vienkāršākas nekā dažas alternatīvas. Varat viegli sinhronizēt vairākus notikumus, tādējādi uzlabojot efektivitāti.