Ereignisemitter sind Objekte in NodeJS, die Ereignisse auslösen, indem sie eine Nachricht senden, um zu signalisieren, dass eine Aktion stattgefunden hat.

Node.js bietet ein integriertes Ereignismodul. Es enthält eine Ereignis-Emitter-Klasse, mit der Sie benutzerdefinierte Ereignisse über Callback-Funktionen erstellen und verarbeiten können.

Hier erfahren Sie, wie Sie Ereignisse ausgeben, Ereignisdaten abhören und verarbeiten und Ereignisfehler in NodeJS behandeln.

Ausgeben von Ereignissen

Das Veranstaltungsmodul ist ein zentraler Bestandteil von die serverseitige Node.js-Umgebung. Sie müssen es also nicht installieren, aber bevor Sie die verwenden EventEmitter Klasse müssen Sie aus dem Ereignismodul importieren und instanziieren.

So:

konst EventEmitter = erfordern("Veranstaltungen");

// EventEmitter instanziieren
konst meinEmitter = neu EventEmitter();

Sie können Ereignisse mit ausgeben EventEmitter'S emittieren Methode. Der emittieren Methode dauert ein Veranstaltungsname und eine beliebige Anzahl von Argumenten als Parameter.

instagram viewer

Sobald Sie anrufen emittieren -Methode gibt es die übergebene aus Veranstaltungsname. Dann ruft es synchron alle Listener des Ereignisses in der Reihenfolge auf, in der Sie sie registriert haben, und übergibt die bereitgestellten Argumente an jeden. Endlich kehrt es zurück WAHR ob die Veranstaltung Zuhörer hatte und FALSCH wenn es keine Zuhörer hätte.

Zum Beispiel:

meinEmitter.emit("Testereignis", "foo", "Bar", 1, 2);

Im obigen Codeblock haben Sie bestanden Testereignis als die Veranstaltungsname, Und "Foo,” "Bar,” 1, Und 2 als Argumente. Wenn der obige Codeblock ausgeführt wird, benachrichtigt er alle Listener, die auf die hören Testereignis Fall. Es ruft diese Listener mit den angegebenen Argumenten auf.

Auf Ereignisse lauschen

Sie können mithilfe von auf ausgegebene Ereignisse lauschen EventEmitter'S An Methode. Der An Methode dauert ein Veranstaltungsname und eine Callback-Funktion als Parameter. Wenn die Veranstaltung mit der Veranstaltungsname in die übergegangen An -Methode ausgegeben wird, ruft sie ihre Callback-Funktion auf. Diese Methode gibt einen Verweis auf die zurück EventEmitter, sodass Sie mehrere Anrufe verketten können.

Zum Beispiel:

// Erster Zuhörer
meinEmitter.on("Testereignis", () => {
Konsole.log ("Testereignis ausgegeben!!!");
}); // Testereignis ausgegeben!!!

// Zweiter Zuhörer
meinEmitter.on("Testereignis", (...Argumente) => {
args = args.join(", ");
Konsole.Protokoll(`Ereignis, das mit den folgenden Argumenten ausgegeben wird: ${args}`);
}); // Ereignis, das mit den folgenden Argumenten ausgegeben wird: foo, bar, 1, 2

meinEmitter.emit("Testereignis", "foo", "Bar", 1, 2);

Im Codeblock oben, wenn die Testereignis -Ereignis ausgibt, rufen die Listener für das Ereignis ihre Callback-Funktionen auf. Die Zuhörer reagieren in der Reihenfolge, in der Sie sie registriert haben, was bedeutet, dass der Rückruf des „ersten Zuhörers“ vor dem zweiten ausgeführt wird und so weiter.

Sie können dieses Verhalten mit ändern EventEmitter'S prependListener Methode. Diese Methode verwendet die gleichen Parameter wie die An Methode. Der Unterschied besteht darin, dass diese Methode zuerst auf das Ereignis reagiert, unabhängig davon, wann Sie es registrieren.

Zum Beispiel:

meinEmitter.on("Testereignis", () => {
Konsole.log ("Testereignis ausgegeben!!!");
});

meinEmitter.prependListener("Testereignis", () => {
Konsole.log ("Führt zuerst aus")
})

// console.log (meinEmitter.listeners("Testereignis"));
meinEmitter.emit("Testereignis", "foo", "Bar", 1, 2);

Wenn der obige Codeblock ausgeführt wird, wird zuerst „Executes first“ in der Konsole protokolliert, gefolgt von „TestEvent Emitted!!!“. unabhängig von der Reihenfolge, in der Sie sie aufgrund der registriert haben prependListener Methode.

Wenn Sie mehrere Hörer bei der prependListener -Methode werden sie der Reihe nach vom letzten zum ersten ausgeführt.

Beachten Sie die Anordnung von Sender und Zuhörern. Die Zuhörer kommen immer vor den Sender. Diese Anordnung liegt daran, dass die Zuhörer bereits auf das Ereignis lauschen müssen, bevor der Emitter es aussendet.

Betrachten Sie für den Kontext den folgenden Codeblock:

meinEmitter.emit("Testereignis", "foo", "Bar", 1, 2);

meinEmitter.on("Testereignis", () => {
Konsole.log ("Testereignis ausgegeben!!!");
});

Wenn Sie den obigen Codeblock ausführen, passiert nichts, da zu dem Zeitpunkt, als der Emitter das Ereignis aussendete, kein Listener auf das Ereignis lauschte.

Einmaliges Abhören von Ereignissen

Abhängig von Ihren Anforderungen müssen Sie einige Ereignisse möglicherweise nur einmal im Lebenszyklus Ihrer Anwendung behandeln. Dies erreichen Sie mit der EventEmitter'S einmal Methode.

Diese Methode akzeptiert die gleichen Argumente wie die An Methode und funktioniert ähnlich. Der einzige Unterschied besteht darin, dass sich die Hörer bei der registriert haben einmal -Methode nur einmal auf das Ereignis lauschen.

Zum Beispiel:

meinEmitter.einmal("Einzelveranstaltung", () => {
Konsole.log ("Ereignis wird einmal behandelt");
});

meinEmitter.emit("Einzelveranstaltung"); // Ereignis wird einmal behandelt
meinEmitter.emit("Einzelveranstaltung"); // Ignoriert
meinEmitter.emit("Einzelveranstaltung"); // Ignoriert

Durch das Ausführen des Codeblocks wird „Ereignis behandelt einmal“ nur einmal in der Konsole protokolliert, unabhängig davon, wie oft der Emitter das Ereignis ausgibt.

Bei der registrierte Zuhörer einmal -Methode reagieren auf das Ereignis in der Reihenfolge, in der Sie sie registrieren. Sie können dieses Verhalten mit ändern prependOnceListener Methode, die wie funktioniert prependListener. Der einzige Unterschied besteht darin, dass sich die Hörer bei der registriert haben einmal -Methode nur einmal auf das Ereignis lauschen.

Behandlung von Fehlern mit Event-Emittern

Sie sollten darauf achten Behandeln Sie JavaScript-Fehler angemessen und Ereignis-Listener sind keine Ausnahme. Nicht behandelte Fehler von ihnen führen dazu, dass der Node.js-Prozess beendet wird und Ihre Anwendung abstürzt.

Um ein Fehlerereignis zu verarbeiten, muss mindestens einer der Listener des Ereignisses über ein Fehlerereignis verfügen Veranstaltungsname einstellen Fehler.

Zum Beispiel:

meinEmitter.on("Fehler", (Fehler) => {
Konsole.Fehler(`Fehler: ${Fehler}`);
});

Wenn ein Listener einen potenziellen Fehler behandelt, wie im obigen Codeblock, wird verhindert, dass die Anwendung abstürzt, wenn ein Fehler auftritt.

Zum Beispiel:

meinEmitter.emit("Fehler", neuer Fehler ("Dies ist ein Fehler"));

Beim Ausführen des obigen Codeblocks wird „Dies ist ein Fehler“ in der Konsole protokolliert, da ein Listener Fehlerereignisse verarbeitet.

Verwalten von Ereignis-Listenern

Der EventEmitter -Klasse verfügt über mehrere Methoden, mit denen Sie Ereignis-Listener bearbeiten und verwalten können. Sie können die Listener eines Ereignisses abrufen, sie entfernen und die maximale Anzahl von Listenern für ein Ereignis festlegen.

Hier ist eine Tabelle mit EventEmitter Methoden, mit denen Sie Ereignis-Listener manipulieren können:

Methode Argumente Rückgabewert
ListenerCount Veranstaltungsname Gibt die Anzahl der Listener zurück, die ein Ereignis abonniert haben
Zuhörer Veranstaltungsname Gibt ein Array von Listenern zurück
Listener entfernen Veranstaltungsname Entfernt mindestens einen Listener aus einem angegebenen eventName.
AlleListener entfernen Veranstaltungsname Entfernt alle Listener für einen angegebenen eventName. Wenn Sie keinen Ereignisnamen angeben, entfernt dieser Methodenaufruf alle Listener für den EventEmitter.
setMaxListeners Nummer Ändert die standardmäßige maximale Anzahl von Listenern pro Ereignis. Verwenden Sie unendlich oder null, um eine unbegrenzte Anzahl von Zuhörern anzugeben. Standardmäßig können Sie nur zehn Zuhörer für ein Ereignis abonnieren.

Sie können diese Methoden nur für eine aufrufen EventEmitter Beispiel.

Zum Beispiel:

meinEmitter.removeListener("Testereignis");

Der obige Codeblock entfernt einen einzelnen Listener für die Testereignis Fall.

Die Bedeutung von Event-Emittern

Node.js übernimmt das ereignisgesteuerte Programmierparadigma mit seiner Unterstützung für Ereignis-Emitter und -Listener. Die ereignisgesteuerte Programmierung ist einer der Gründe, warum Node.js-Programme schneller und unkomplizierter sind als einige Alternativen. Sie können problemlos mehrere Ereignisse synchronisieren, was zu einer verbesserten Effizienz führt.