Node.js - Emettitore di eventi
Molti oggetti in un nodo emettono eventi, ad esempio un net.Server emette un evento ogni volta che un peer si connette ad esso, un fs.readStream emette un evento quando il file viene aperto. Tutti gli oggetti che emettono eventi sono istanze di events.EventEmitter.
EventEmitter Class
Come abbiamo visto nella sezione precedente, la classe EventEmitter si trova nel modulo events. È accessibile tramite il codice seguente:
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Quando un'istanza EventEmitter affronta un errore, emette un evento di "errore". Quando viene aggiunto un nuovo listener, viene generato l'evento "newListener" e quando un listener viene rimosso, viene generato l'evento "removeListener".
EventEmitter fornisce più proprietà come on e emit. on viene utilizzata per associare una funzione all'evento e emit viene utilizzato per attivare un evento.
Metodi
Sr.No. | Metodo e descrizione |
---|---|
1 | addListener(event, listener) Aggiunge un listener alla fine dell'array listener per l'evento specificato. Non vengono effettuati controlli per vedere se l'ascoltatore è già stato aggiunto. Più chiamate che passano la stessa combinazione di evento e listener comporteranno l'aggiunta più volte dell'ascoltatore. Restituisce l'emettitore, quindi le chiamate possono essere concatenate. |
2 | on(event, listener) Aggiunge un listener alla fine dell'array listener per l'evento specificato. Non vengono effettuati controlli per vedere se l'ascoltatore è già stato aggiunto. Più chiamate che passano la stessa combinazione di evento e listener comporteranno l'aggiunta più volte dell'ascoltatore. Restituisce l'emettitore, quindi le chiamate possono essere concatenate. |
3 | once(event, listener) Aggiunge un ascoltatore occasionale all'evento. Questo listener viene richiamato solo la prossima volta che l'evento viene generato, dopodiché viene rimosso. Restituisce l'emettitore, quindi le chiamate possono essere concatenate. |
4 | removeListener(event, listener) Rimuove un listener dall'array listener per l'evento specificato. Caution −Modifica gli indici dell'array nell'array listener dietro l'ascoltatore. removeListener rimuoverà al massimo un'istanza di un listener dall'array listener. Se un singolo listener è stato aggiunto più volte all'array listener per l'evento specificato, removeListener deve essere chiamato più volte per rimuovere ogni istanza. Restituisce l'emettitore, quindi le chiamate possono essere concatenate. |
5 | removeAllListeners([event]) Rimuove tutti i listener o quelli dell'evento specificato. Non è una buona idea rimuovere i listener che sono stati aggiunti altrove nel codice, specialmente quando è su un emettitore che non hai creato (es. Socket o flussi di file). Restituisce l'emettitore, quindi le chiamate possono essere concatenate. |
6 | setMaxListeners(n) Per impostazione predefinita, EventEmitters stamperà un avviso se vengono aggiunti più di 10 listener per un particolare evento. Questa è un'utile impostazione predefinita che aiuta a trovare perdite di memoria. Ovviamente non tutti gli Emettitori dovrebbero essere limitati a 10. Questa funzione permette di aumentarlo. Impostare a zero per illimitato. |
7 | listeners(event) Restituisce un array di listener per l'evento specificato. |
8 | emit(event, [arg1], [arg2], [...]) Esegui ciascuno degli ascoltatori in ordine con gli argomenti forniti. Restituisce vero se l'evento aveva ascoltatori, falso in caso contrario. |
Metodi di classe
Sr.No. | Metodo e descrizione |
---|---|
1 | listenerCount(emitter, event) Restituisce il numero di listener per un determinato evento. |
Eventi
Sr.No. | Eventi e descrizione |
---|---|
1 | newListener
Questo evento viene emesso ogni volta che viene aggiunto un listener. Quando questo evento viene attivato, il listener potrebbe non essere stato ancora aggiunto all'array di listener per l'evento. |
2 | removeListener
Questo evento viene emesso ogni volta che qualcuno rimuove un ascoltatore. Quando questo evento viene attivato, il listener potrebbe non essere stato ancora rimosso dall'array di listener per l'evento. |
Esempio
Crea un file js denominato main.js con il seguente codice 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.");
Ora esegui main.js per vedere il risultato -
$ node main.js
Verifica l'output.
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.