2012-10-15 9 views
16

Sono nuovo in node.js e nello script java, non riesco a trovare il significato di questa parola chiave ".on". quando lo cambio con un altro codice parola fallito.In node.js "request.on" cosa è questo ".on"

var req = http.get("http://www.google.com", function(res) { 
    console.log("Got response: " + res.statusCode); 

res.on('data', function (chunk) { 
}); 

}).on('error', function(e) { 
console.log("Got error: " + e.message); 
}); 

risposta

18

Il su metodo associa un evento a un oggetto.

E 'un modo per esprimere il vostro intento se c'è qualcosa che accade (dati inviati o un errore nel tuo caso), poi eseguire la funzione aggiunta come parametro. Questo stile di programmazione si chiama Programmazione basata sugli eventi. Si potrebbe desiderare di guardare in su nella Wikipedia

In node.js, v'è una classe chiamata EventEmitter che fornisce tutto il codice che è necessario per gli eventi di base, se si decide di utilizzarli in proprio codice (che consiglio vivamente nel caso di node.js). Documenti per node.js EventEmitter sono here

8

.on è un uso metodo per legare gestore di eventi.

+0

grazie, suppongo di non aver ancora oriantato me stesso con la documentazione di node.js. – avicennasoftwarelabs

+0

Guarda la documentazione di 'stream'. Il risultato di una richiesta HTTP è un 'stream' leggibile e avrà tutti gli eventi e i metodi associati a tale. – ebohlman

2

Il callback per http.get viene richiamato con un singolo argomento (che hai nominato req). req, abbreviazione di "richiesta", è un nome comune, poiché questo argomento è un oggetto http.ClientRequest. L'oggetto http.ClientRequest implementa stream.Writable ed ecco il bit importante: tutti gli stream sono istanze di EventEmitter.

EventEmitter ha una funzione denominata on, che aggiunge una funzione listener per un evento specificato.

"funzione listener" è solo un altro nome per "funzione di callback"

Nel tuo esempio, hai aggiunto un listener per l'evento e l'evento dataerror. Le funzioni di ascolto sono chiamate (ergo il termine "callback") da EventEmitter.

Credit Extra

Se hai bisogno di un ascoltatore di fermare l'ascolto (cioè, non si desidera più il callback per essere chiamato), è possibile rimuovere un ascoltatore con la funzione emitter.removeListener:

var myCallback = function(e) { console.log('Got error: ' + e.message); } 
res.on('error', myCallback); 
// do some things... 
res.removeListener('error', myCallback); 

Se si desidera solo un ascoltatore da eseguire una volta, è possibile utilizzare emitter.once anziché la funzione on, e quindi non sarà necessario rimuoverlo:

res.once('error', myCallback); 
Problemi correlati