Node.js - Emiter zdarzeń

Wiele obiektów w węźle emituje zdarzenia, na przykład net.Server emituje zdarzenie za każdym razem, gdy peer się z nim łączy, fs.readStream emituje zdarzenie podczas otwierania pliku. Wszystkie obiekty, które emitują zdarzenia, są instancjami zdarzeń Events.EventEmitter.

Klasa EventEmitter

Jak widzieliśmy w poprzedniej sekcji, klasa EventEmitter znajduje się w module zdarzeń. Jest dostępny za pomocą następującego kodu -

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

Gdy instancja EventEmitter napotka jakikolwiek błąd, emituje zdarzenie „błąd”. Po dodaniu nowego detektora wyzwalane jest zdarzenie „newListener”, a po usunięciu detektora - zdarzenie „removeListener”.

EventEmitter udostępnia wiele właściwości, takich jak on i emit. on Właściwość służy do wiązania funkcji ze zdarzeniem i emit służy do wywołania zdarzenia.

Metody

Sr.No. Metoda i opis
1

addListener(event, listener)

Dodaje detektor na końcu tablicy detektorów dla określonego zdarzenia. Nie są sprawdzane, czy odbiornik został już dodany. Wiele wywołań przekazujących tę samą kombinację zdarzenia i detektora spowoduje wielokrotne dodawanie nasłuchiwania. Zwraca emiter, więc połączenia można łączyć.

2

on(event, listener)

Dodaje detektor na końcu tablicy detektorów dla określonego zdarzenia. Nie są sprawdzane, czy odbiornik został już dodany. Wiele wywołań przekazujących tę samą kombinację zdarzenia i detektora spowoduje wielokrotne dodawanie nasłuchiwania. Zwraca emiter, więc połączenia można łączyć.

3

once(event, listener)

Dodaje jednorazowego nasłuchiwania do zdarzenia. Ten detektor jest wywoływany tylko przy następnym uruchomieniu zdarzenia, po czym jest usuwany. Zwraca emiter, więc połączenia można łączyć.

4

removeListener(event, listener)

Usuwa detektor z tablicy detektorów dla określonego zdarzenia. Caution −Zmienia indeksy tablic w tablicy listener za listener. removeListener usunie co najwyżej jedną instancję detektora z tablicy listener. Jeśli jakikolwiek pojedynczy detektor został dodany wiele razy do tablicy detektorów dla określonego zdarzenia, removeListener musi zostać wywołana wiele razy, aby usunąć każde wystąpienie. Zwraca emiter, więc połączenia można łączyć.

5

removeAllListeners([event])

Usuwa wszystkie detektory lub te z określonego zdarzenia. Nie jest dobrym pomysłem usuwanie odbiorników, które zostały dodane w innym miejscu kodu, zwłaszcza gdy są one na emiterze, którego nie utworzyłeś (np. Gniazda lub strumienie plików). Zwraca emiter, więc połączenia można łączyć.

6

setMaxListeners(n)

Domyślnie EventEmitters wydrukuje ostrzeżenie, jeśli dla określonego zdarzenia zostanie dodanych więcej niż 10 detektorów. Jest to przydatna wartość domyślna, która pomaga znaleźć wycieki pamięci. Oczywiście nie wszystkie emitery powinny być ograniczone do 10. Ta funkcja pozwala na zwiększenie tego. Ustaw na zero dla nieograniczonej liczby.

7

listeners(event)

Zwraca tablicę detektorów dla określonego zdarzenia.

8

emit(event, [arg1], [arg2], [...])

Wykonaj kolejno każdego ze słuchaczy z podanymi argumentami. Zwraca wartość true, jeśli zdarzenie ma detektory, w przeciwnym razie zwraca wartość false.

Metody klasowe

Sr.No. Metoda i opis
1

listenerCount(emitter, event)

Zwraca liczbę detektorów dla danego zdarzenia.

Wydarzenia

Sr.No. Wydarzenia i opis
1

newListener

  • event - Ciąg: nazwa wydarzenia

  • listener - Funkcja: funkcja obsługi zdarzeń

To zdarzenie jest emitowane za każdym razem, gdy zostanie dodany odbiornik. Kiedy to zdarzenie jest wyzwalane, detektor mógł nie zostać jeszcze dodany do tablicy detektorów zdarzenia.

2

removeListener

  • event - Ciąg Nazwa zdarzenia

  • listener - Funkcja Funkcja obsługi zdarzeń

To zdarzenie jest emitowane za każdym razem, gdy ktoś usunie słuchacza. Gdy to zdarzenie jest wyzwalane, detektor mógł nie zostać jeszcze usunięty z tablicy detektorów zdarzenia.

Przykład

Utwórz plik js o nazwie main.js z następującym kodem Node.js -

var events = require('events');
var eventEmitter = new events.EventEmitter();

// listener #1
var listner1 = function listner1() {
   console.log('listner1 executed.');
}

// listener #2
var listner2 = function listner2() {
   console.log('listner2 executed.');
}

// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);

// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);

var eventListeners = require('events').EventEmitter.listenerCount
   (eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

// Fire the connection event 
eventEmitter.emit('connection');

// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");

// Fire the connection event 
eventEmitter.emit('connection');

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");

Teraz uruchom plik main.js, aby zobaczyć wynik -

$ node main.js

Sprawdź dane wyjściowe.

2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.