2015-10-19 16 views
5

Sono nuovo in javascript e ora sto imparando su express.js, ma ottengo del codice che mi rende confuso su come funzionano. Stavo Tring per capire come questo lavoro di codice, ma io ancora non capisco:Informazioni sulla callback app.listen()

var server = app.listen(3000, function(){ 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('Example app listening at http://%s:%s', host, port); 
}); 

mia domanda è come questa funzione anonima può utilizzare la variabile del server, quando la variabile del server ottenendo valore restituito da app.listen().

risposta

8

La funzione anonima è in effetti una richiamata che viene chiamata dopo l'inizializzazione dell'app. Controllo this doc(app.listen() is the same as server.listen()):

Questa funzione è asincrona. L'ultimo callback dei parametri verrà aggiunto come listener per l'evento 'listening'.

Quindi il metodo restituisce un oggetto app.listen() per var server, ma non ha ancora chiamato il callback. Questo è il motivo per cui la variabile server è disponibile all'interno del callback, viene creata prima della chiamata alla funzione di callback.

Per rendere le cose più chiare, provate questo test:

console.log("Calling app.listen()."); 

var server = app.listen(3000, function(){ 
    console.log("Calling app.listen's callback function."); 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('Example app listening at http://%s:%s', host, port); 
}); 

console.log("app.listen() executed."); 

si dovrebbe vedere questi registri nella console del nodo:

Calling app.listen().

app.listen() eseguito.

Chiamata alla funzione di richiamata di app.listen.

Esempio di app in ascolto ...

Problemi correlati