2015-10-19 36 views
5

Tôi mới sử dụng javascript và bây giờ tôi đang tìm hiểu về express.js, nhưng tôi nhận được một số mã khiến tôi bối rối về cách chúng hoạt động. Tôi đã Tring để tìm ra cách làm việc mã này, nhưng tôi vẫn không nhận được nó:Giới thiệu app.listen() gọi lại

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); 
}); 

Câu hỏi của tôi là như thế nào chức năng ẩn danh này có thể sử dụng các biến server, khi biến máy chủ nhận được giá trị trả về từ app.listen().

Trả lời

8

Chức năng ẩn danh thực tế là một cuộc gọi lại được gọi sau khi khởi chạy ứng dụng. Kiểm tra this doc(app.listen() is the same as server.listen()):

Chức năng này không đồng bộ. Cuộc gọi lại tham số cuối cùng sẽ được thêm làm trình nghe cho sự kiện 'nghe'.

Vì vậy, phương pháp app.listen() trả về một đối tượng là var server nhưng chưa được gọi lại. Đó là lý do tại sao biến số server có sẵn bên trong hàm gọi lại, nó được tạo trước khi hàm gọi lại được gọi.

Để làm cho mọi việc rõ ràng hơn, hãy thử kiểm tra này:

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

Bạn sẽ thấy các bản ghi trong giao diện điều khiển của nút của bạn:

Calling app.listen().

app.listen() được thi hành.

Gọi chức năng gọi lại của app.listen.

Nghe ứng dụng mẫu tại ...