2015-10-19 11 views
5

私はjavascriptで新しく、今はexpress.jsについて学んでいますが、どのように動作するのか混乱させるいくつかのコードがあります。私はどのようにこのコードの動作を把握するトリングましたが、私はまだそれを得ることはありません:サーバー変数がapp.listen()からの戻り値を取得するとき、この無名関数は、サーバー変数を使用することができますどのようにについて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); 
}); 

私の質問です。

答えて

8

実際には、匿名関数はコールバックであり、アプリケーションの初期化後に呼び出されます。チェックthis doc(app.listen() is the same as server.listen())

この機能は非同期です。最後のパラメータコールバックは 'listening'イベントのリスナーとして追加されます。

したがって、app.listen()メソッドはオブジェクトをvar serverに返しますが、コールバックはまだ呼び出されません。そのため、server変数はコールバック内で使用可能で、コールバック関数が呼び出される前に作成されます。

このテストをしてみてください、物事をより明確にする:

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."); 

あなたのノードのコンソールでこれらのログが表示されます。

()を呼び出すapp.listen。

app.listen()が実行されました。

app.listenのコールバック関数を呼び出す。

リッスンアプリの例...

関連する問題