Emitery zdarzeń to obiekty w NodeJS, które wyzwalają zdarzenia, wysyłając wiadomość sygnalizującą, że wystąpiła akcja.
Node.js udostępnia wbudowany moduł zdarzeń. Zawiera klasę emitera zdarzeń, która umożliwia tworzenie i obsługę niestandardowych zdarzeń za pomocą funkcji wywołania zwrotnego.
Tutaj dowiesz się, jak emitować zdarzenia, nasłuchiwać i obsługiwać dane zdarzeń oraz obsługiwać błędy zdarzeń w NodeJS.
Emitowanie zdarzeń
Moduł zdarzeń jest podstawową częścią środowisko po stronie serwera Node.js. Dlatego nie musisz go instalować, ale przed użyciem Emiter zdarzeń class, musisz zaimportować z modułu zdarzeń i utworzyć jego instancję.
jak tak:
konst Emiter zdarzenia = wymagać(„wydarzenia”);
// Tworzenie instancji EventEmitter
konst mój emiter = nowy Emiter zdarzenia();
Możesz emitować zdarzenia za pomocą Emiter zdarzeń'S emitować metoda. The emitować metoda zajmuje Nazwa wydarzenia oraz dowolną liczbę argumentów jako parametrów.
Gdy zadzwonisz do emitować metoda, emituje pass Nazwa wydarzenia
. Następnie synchronicznie wywołuje każdy z detektorów zdarzenia w kolejności, w jakiej je zarejestrowałeś, przekazując każdemu z nich dostarczone argumenty. Wreszcie powraca PRAWDA gdyby wydarzenie miało słuchaczy i FAŁSZ gdyby nie miał słuchaczy.Na przykład:
mójEmiter.emit("Zdarzenie testowe", "bla", "bar", 1, 2);
W powyższym bloku kodu zdałeś Zdarzenie testowe jako Nazwa wydarzenia, I "bla,” "bar,” 1, I 2 jako argumenty. Gdy powyższy blok kodu zostanie uruchomiony, powiadomi wszystkich słuchaczy nasłuchujących Zdarzenie testowe wydarzenie. Wywoła tych słuchaczy z podanymi argumentami.
Słuchanie zdarzeń
Możesz nasłuchiwać emitowanych zdarzeń za pomocą Emiter zdarzeń'S NA metoda. The NA metoda zajmuje Nazwa wydarzenia i funkcja wywołania zwrotnego jako parametry. Kiedy impreza z Nazwa wydarzenia przeszedł do NA metoda jest emitowana, wywołuje swoją funkcję wywołania zwrotnego. Ta metoda zwraca odwołanie do Emiter zdarzeń, co pozwala na łączenie wielu połączeń.
Na przykład:
// Pierwszy słuchacz
mójEmiter.on("Zdarzenie testowe", () => {
log konsoli ("Wyemitowano zdarzenie testowe!!!");
}); // Wyemitowano zdarzenie testowe!!!// Drugi słuchacz
mójEmiter.on("Zdarzenie testowe", (...argumenty) => {
argumenty = argumenty.join(", ");
konsola.dziennik(`Zdarzenie emitowane z następującymi argumentami: ${argumenty}`);
}); // Zdarzenie emitowane z następującymi argumentami: foo, bar, 1, 2
mójEmiter.emit("Zdarzenie testowe", "bla", "bar", 1, 2);
W powyższym bloku kodu, gdy plik Zdarzenie testowe zdarzenie emituje, detektory zdarzenia wywołają swoje funkcje wywołania zwrotnego. Słuchacze będą reagować w kolejności, w jakiej ich zarejestrowałeś, co oznacza, że wywołanie zwrotne „pierwszego słuchacza” zostanie uruchomione przed drugim i tak dalej.
Możesz zmienić to zachowanie za pomocą Emiter zdarzeń'S prependListener metoda. Ta metoda przyjmuje te same parametry, co metoda NA metoda. Różnica polega na tym, że ta metoda reaguje na zdarzenie jako pierwsza, niezależnie od tego, kiedy je zarejestrujesz.
Na przykład:
mójEmiter.on("Zdarzenie testowe", () => {
log konsoli ("Wyemitowano zdarzenie testowe!!!");
});myEmitter.prependListener("Zdarzenie testowe", () => {
log konsoli ("Wykonuje jako pierwszy")
})
// console.log (myEmitter.listeners("Zdarzenie testowe"));
mójEmiter.emit("Zdarzenie testowe", "bla", "bar", 1, 2);
Gdy powyższy blok kodu zostanie wykonany, najpierw w konsoli zostanie zarejestrowane „Wykonane jako pierwsze”, a następnie „Emisja zdarzenia testowego!!!” niezależnie od kolejności, w jakiej je zarejestrowałeś z powodu prependListener metoda.
Jeśli zarejestrujesz kilku słuchaczy za pomocą prependListener metody, będą uruchamiane w kolejności od ostatniego do pierwszego.
Zwróć uwagę na rozmieszczenie emitera i słuchaczy. Słuchacze zawsze pojawiają się przed nadawcą. To ustawienie wynika z tego, że słuchacze muszą już nasłuchiwać zdarzenia, zanim emiter je wyemituje.
Dla kontekstu rozważ poniższy blok kodu:
mójEmiter.emit("Zdarzenie testowe", "bla", "bar", 1, 2);
mójEmiter.on("Zdarzenie testowe", () => {
log konsoli ("Wyemitowano zdarzenie testowe!!!");
});
Jeśli uruchomisz powyższy blok kodu, nic się nie stanie, ponieważ w momencie, gdy emiter wyemitował zdarzenie, żaden słuchacz nie nasłuchiwał zdarzenia.
Słuchanie wydarzeń Raz
W zależności od wymagań może być konieczne obsłużenie niektórych zdarzeń tylko raz w cyklu życia aplikacji. Możesz to osiągnąć za pomocą Emiter zdarzeń'S raz metoda.
Ta metoda przyjmuje te same argumenty co metoda NA sposób i działa podobnie. Jedyna różnica polega na tym, że słuchacze zarejestrowali się w domenie raz Metoda nasłuchuje zdarzenia tylko raz.
Na przykład:
mójEmiter.once("Pojedyncze zdarzenie", () => {
log konsoli ("Zdarzenie obsłużone raz");
});
mójEmiter.emit("Pojedyncze zdarzenie"); // Zdarzenie obsłużone raz
mójEmiter.emit("Pojedyncze zdarzenie"); // Zignorowano
mójEmiter.emit("Pojedyncze zdarzenie"); // Zignorowano
Uruchomienie bloku kodu spowoduje zarejestrowanie „Zdarzenia obsługiwanego raz” w konsoli tylko raz, niezależnie od tego, jak często emiter emituje zdarzenie.
Słuchacze zarejestrowani w raz reagują na zdarzenie w kolejności, w jakiej je zarejestrowałeś. Możesz zmienić to zachowanie za pomocą dodajOnceListener metoda, która działa jak prependListener. Jedyna różnica polega na tym, że słuchacze zarejestrowali się w domenie raz Metoda nasłuchuje zdarzenia tylko raz.
Obsługa błędów za pomocą emiterów zdarzeń
Powinieneś zadbać o odpowiednio obsłużyć błędy JavaScript i detektory zdarzeń nie są wyjątkiem. Nieobsługiwane przez nich błędy spowodują zakończenie procesu Node.js i awarię aplikacji.
Aby obsłużyć zdarzenie błędu, przynajmniej jeden z detektorów zdarzenia musi go mieć Nazwa wydarzenia Ustawić błąd.
Na przykład:
mójEmiter.on("błąd", (błąd) => {
konsola.błąd(`Błąd: ${błąd}`);
});
Posiadanie odbiornika obsługującego potencjalny błąd, tak jak w powyższym bloku kodu, zapobiegnie zawieszaniu się aplikacji w przypadku wystąpienia błędu.
Na przykład:
mójEmiter.emit("błąd", nowy Błąd ("To jest błąd"));
Uruchomienie powyższego bloku kodu spowoduje zarejestrowanie komunikatu „To jest błąd” w konsoli, ponieważ detektor obsługuje zdarzenia błędów.
Zarządzanie detektorami zdarzeń
The Emiter zdarzeń class ma kilka metod, które pozwalają manipulować detektorami zdarzeń i zarządzać nimi. Możesz uzyskać słuchaczy wydarzenia, usunąć ich i ustawić maksymalną liczbę słuchaczy wydarzenia.
Oto tabela zawierająca Emiter zdarzeń metody, którymi możesz manipulować detektorami zdarzeń:
metoda | Argumenty | Wartość zwracana |
---|---|---|
liczba słuchaczy | Nazwa wydarzenia | Zwraca liczbę słuchaczy subskrybujących zdarzenie |
słuchacze | Nazwa wydarzenia | Zwraca tablicę słuchaczy |
usuń słuchacza | Nazwa wydarzenia | Usuwa co najmniej jeden odbiornik z określonego zdarzeniaName. |
usuń wszystkich słuchaczy | Nazwa wydarzenia | Usuwa wszystkie detektory dla określonej nazwy zdarzenia. Jeśli nie określisz nazwy zdarzenia, to wywołanie metody usunie wszystkie detektory dla obiektu EventEmitter. |
ustawMaxListeners | numer | Zmienia domyślną maksymalną liczbę słuchaczy na zdarzenie. Użyj nieskończoności lub zera, aby wskazać nieograniczoną liczbę słuchaczy. Domyślnie do wydarzenia można zasubskrybować tylko dziesięciu słuchaczy. |
Możesz wywoływać te metody tylko na Emiter zdarzeń instancja.
Na przykład:
myEmitter.removeListener("Zdarzenie testowe");
Powyższy blok kodu usuwa pojedynczego słuchacza dla Zdarzenie testowe wydarzenie.
Znaczenie emiterów zdarzeń
Node.js przyjmuje paradygmat programowania sterowanego zdarzeniami z obsługą emiterów i odbiorników zdarzeń. Programowanie sterowane zdarzeniami jest jednym z powodów, dla których programy Node.js są szybsze i prostsze niż niektóre alternatywy. Możesz łatwo zsynchronizować wiele zdarzeń, co skutkuje lepszą wydajnością.