Gebeurteniszenders zijn objecten in NodeJS die gebeurtenissen activeren door een bericht te verzenden om aan te geven dat er een actie heeft plaatsgevonden.

Node.js biedt een ingebouwde gebeurtenissenmodule. Het bevat een gebeurtenisemitterklasse waarmee u aangepaste gebeurtenissen kunt maken en afhandelen via callback-functies.

Hier leert u hoe u gebeurtenissen uitzendt, gebeurtenisgegevens beluistert en verwerkt en gebeurtenisfouten in NodeJS afhandelt.

Gebeurtenissen uitzenden

De evenementenmodule is een kernonderdeel van de Node.js server-side omgeving. U hoeft het dus niet te installeren, maar voordat u de EvenementEmitter class, moet u importeren vanuit de gebeurtenissenmodule en deze instantiëren.

Zoals zo:

const Evenementzender = vereisen("evenementen");

// De EventEmitter instantiëren
const mijnzender = nieuw Gebeurteniszender();

U kunt gebeurtenissen uitzenden met behulp van de EvenementEmitter'S uitstoten methode. De uitstoten methode duurt een evenement naam en een willekeurig aantal argumenten als parameters.

instagram viewer

Zodra je de uitstoten methode, het zendt de doorgegeven evenement naam. Vervolgens roept het synchroon elk van de luisteraars van het evenement aan in de volgorde waarin u ze hebt geregistreerd, waarbij de opgegeven argumenten aan elk worden doorgegeven. Eindelijk keert het terug WAAR als het evenement luisteraars had en vals als het geen luisteraars had.

Bijvoorbeeld:

mijnEmitter.emit("TestEvenement", "foe", "bar", 1, 2);

In het bovenstaande codeblok ben je geslaagd TestEvenement als de Evenement naam, En "foe,” "bar,” 1, En 2 als de argumenten. Wanneer het bovenstaande codeblok wordt uitgevoerd, worden alle luisteraars die luisteren naar de TestEvenement evenement. Het zal die luisteraars bellen met de gegeven argumenten.

Luisteren naar gebeurtenissen

U kunt luisteren naar uitgezonden gebeurtenissen met behulp van de EvenementEmitter'S op methode. De op methode duurt een Evenement naam en een callback-functie als parameters. Wanneer het evenement met de Evenement naam overgegaan in de op methode wordt uitgezonden, roept het zijn callback-functie aan. Deze methode retourneert een verwijzing naar het EvenementEmitter, zodat u meerdere oproepen kunt ketenen.

Bijvoorbeeld:

// Eerste luisteraar
mijnzender.op("TestEvenement", () => {
console.log("TestEvent verzonden!!!");
}); // TestEvent verzonden!!!

// Tweede luisteraar
mijnzender.op("TestEvenement", (...args) => {
args = args.join(", ");
troosten.log(`Gebeurtenis uitgezonden met de volgende argumenten: ${args}`);
}); // Gebeurtenis uitgezonden met de volgende argumenten: foo, bar, 1, 2

mijnEmitter.emit("TestEvenement", "foe", "bar", 1, 2);

In het codeblok hierboven, wanneer de TestEvenement gebeurtenis uitzendt, zullen de luisteraars voor de gebeurtenis hun callback-functies aanroepen. De luisteraars reageren in de volgorde waarin u ze hebt geregistreerd, wat betekent dat de callback van de "eerste luisteraar" voor de tweede wordt uitgevoerd, enzovoort.

U kunt dit gedrag wijzigen met behulp van de EvenementEmitter'S prependListener methode. Deze methode gebruikt dezelfde parameters als de op methode. Het verschil is dat deze methode als eerste reageert op de gebeurtenis, ongeacht het tijdstip waarop u deze registreert.

Bijvoorbeeld:

mijnzender.op("TestEvenement", () => {
console.log("TestEvent verzonden!!!");
});

myEmitter.prependListener("TestEvenement", () => {
console.log("Voert eerst uit")
})

// console.log (myEmitter.luisteraars("TestEvenement"));
mijnEmitter.emit("TestEvenement", "foe", "bar", 1, 2);

Wanneer het bovenstaande codeblok wordt uitgevoerd, wordt eerst "Executes first" in de console gelogd, gevolgd door "TestEvent Emitted!!!" ongeacht de volgorde waarin u ze hebt geregistreerd vanwege de prependListener methode.

Als u meerdere luisteraars aanmeldt bij de prependListener methode, worden ze uitgevoerd in de volgorde van de laatste naar de eerste.

Let op de opstelling van de zender en luisteraars. De luisteraars komen altijd voor de zender. Deze opstelling is omdat de luisteraars al naar de gebeurtenis moeten luisteren voordat de zender deze uitzendt.

Overweeg voor de context het onderstaande codeblok:

mijnEmitter.emit("TestEvenement", "foe", "bar", 1, 2);

mijnzender.op("TestEvenement", () => {
console.log("TestEvent verzonden!!!");
});

Als u het bovenstaande codeblok uitvoert, gebeurt er niets omdat op het moment dat de zender de gebeurtenis uitzond, er geen luisteraar naar de gebeurtenis luisterde.

Een keer luisteren naar gebeurtenissen

Afhankelijk van uw vereisten, hoeft u sommige gebeurtenissen mogelijk slechts één keer in de levenscyclus van uw toepassing af te handelen. U kunt dit bereiken met behulp van de EvenementEmitter'S eenmaal methode.

Deze methode gebruikt dezelfde argumenten als de op methode en werkt op dezelfde manier. Het enige verschil is dat de luisteraars zich bij de eenmaal methode luister slechts één keer naar de gebeurtenis.

Bijvoorbeeld:

mijnEmitter.eenmaal("Eenmalige gebeurtenis", () => {
console.log("Evenement eenmaal afgehandeld");
});

mijnEmitter.emit("Eenmalige gebeurtenis"); // Evenement eenmaal afgehandeld
mijnEmitter.emit("Eenmalige gebeurtenis"); // Buiten beschouwing gelaten
mijnEmitter.emit("Eenmalige gebeurtenis"); // Buiten beschouwing gelaten

Door het codeblok uit te voeren, wordt "Evenement eenmaal afgehandeld" slechts één keer naar de console gelogd, ongeacht hoe vaak de zender de gebeurtenis uitzendt.

Luisteraars hebben zich aangemeld bij de eenmaal methode reageren op de gebeurtenis in de volgorde waarin u ze registreert. U kunt dit gedrag wijzigen met behulp van de prependOnceListener methode, die werkt als prependListener. Het enige verschil is dat de luisteraars zich bij de eenmaal methode luister slechts één keer naar de gebeurtenis.

Omgaan met fouten met gebeurteniszenders

Je moet ervoor zorgen omgaan met JavaScript-fouten op de juiste manier en gebeurtenislisteners zijn geen uitzondering. Onverwerkte fouten van hen zorgen ervoor dat het Node.js-proces wordt afgesloten en dat uw toepassing vastloopt.

Om een ​​foutgebeurtenis af te handelen, moet ten minste één van de luisteraars van de gebeurtenis zijn Evenement naam ingesteld op fout.

Bijvoorbeeld:

mijnzender.op("fout", (fout) => {
troosten.fout(`Fout: ${fout}`);
});

Als een luisteraar een mogelijke fout afhandelt, zoals in het bovenstaande codeblok, stopt de toepassing wanneer er een fout optreedt.

Bijvoorbeeld:

mijnEmitter.emit("fout", nieuwe fout("Dit is een fout"));

Als u het bovenstaande codeblok uitvoert, wordt "Dit is een fout" in de console geregistreerd omdat een luisteraar foutgebeurtenissen afhandelt.

Gebeurtenisluisteraars beheren

De EvenementEmitter class heeft verschillende methoden waarmee u gebeurtenislisteners kunt manipuleren en beheren. U kunt de luisteraars van een gebeurtenis ophalen, verwijderen en het maximale aantal luisteraars voor een gebeurtenis instellen.

Hier is een tabel met daarin EvenementEmitter methoden waarmee u gebeurtenislisteners kunt manipuleren:

Methode Argumenten Winstwaarde
luisteraarCount evenement naam Retourneert het aantal luisteraars dat is geabonneerd op een gebeurtenis
luisteraars evenement naam Retourneert een reeks luisteraars
verwijderListener evenement naam Verwijdert ten minste één luisteraar van een opgegeven eventName.
verwijderAllListeners evenement naam Verwijdert alle listeners voor een opgegeven eventName. Als u geen gebeurtenisnaam opgeeft, verwijdert deze methodeaanroep alle luisteraars voor de EventEmitter.
setMaxListeners nummer Wijzigt het standaard maximum aantal luisteraars per gebeurtenis. Gebruik oneindig of nul om een ​​onbeperkt aantal luisteraars aan te geven. U kunt standaard slechts tien luisteraars abonneren op een gebeurtenis.

U kunt deze methoden alleen aanroepen op een EvenementEmitter voorbeeld.

Bijvoorbeeld:

myEmitter.removeListener("TestEvenement");

Het codeblok hierboven verwijdert een enkele luisteraar voor de TestEvenement evenement.

Het belang van gebeurteniszenders

Node.js gebruikt het gebeurtenisgestuurde programmeerparadigma met ondersteuning voor gebeurteniszenders en luisteraars. Gebeurtenisgestuurd programmeren is een van de redenen waarom Node.js-programma's sneller en eenvoudiger zijn dan sommige alternatieven. U kunt eenvoudig meerdere gebeurtenissen synchroniseren, wat resulteert in verbeterde efficiëntie.