2012-01-13 31 views
7

Tôi chỉ hy vọng một người nào đó có thể làm rõ điều này cho tôi. Nếu tôi có đoạn mã sau chạy server-side với Node.js, không trong một trình duyệt:Thực hiện không đồng bộ Javascript: sẽ là mã chạy lại gọi lại không?

console.log("a"); 
db.get('select * from table1', function(result){ 
console.log("b"); 
}); 
console.log("c"); 

Giả sử cuộc gọi cơ sở dữ liệu không đồng bộ I sẽ nhận được kết quả

a 
c 
b 

Nhưng nếu tôi đã thêm dòng sau vào cuối mã của tôi

while(1); 

Sau đó, b sẽ không bao giờ thực hiện, tôi có đúng không?

+1

Bạn đã thử cái này chưa? –

+0

Bạn đang nói về máy khách hoặc máy chủ javascript? – jfriend00

+0

Chúng tôi sẽ có nghĩa là phía máy chủ với node.js nhưng tôi cho rằng nó sẽ giống nhau, tôi có nhầm không? Javascript luôn luôn là luồng đơn? – mlihp

Trả lời

5

Nếu bạn đang nói về thực thi javascript phía máy khách, bạn là chính xác (cho đến khi trình duyệt quyết định dừng vòng lặp vô hạn của bạn).

JavaScript phía máy khách là chuỗi đơn nên cuộc gọi lại ajax không đồng bộ sẽ không thực thi cho đến khi luồng thực thi chính được thực hiện và luồng thực thi javascript mới có thể được bắt đầu cho sự kiện ajax. chức năng.

Bạn có thể đọc thêm về cách javascript sử dụng hàng đợi sự kiện để tuần tự hóa tất cả các sự kiện trong this post.

Sửa

tôi nhìn thấy từ chỉnh sửa của bạn rằng bạn đang nói về Node.js server-side, không mã trình duyệt. Theo mặc định, gọi lại của bạn sẽ không chạy trong một chuỗi mới để nó sẽ thực thi ngay lập tức như một phần của cuộc gọi hàm db.get() hoặc nhiều khả năng sẽ không thực thi cho đến khi luồng thực hiện hiện tại của bạn kết thúc và sau đó cuộc gọi db.get() cũng được hoàn thành và sau đó gọi lại có thể được thực hiện.

node.js sử dụng chuỗi trong một số trường hợp và không sử dụng chuỗi nội bộ, nhưng không phải trong loại tình huống này.

Đây là số good article về luồng trong node.js.

+0

Đã thêm thông tin thích hợp cho node.js. phía máy chủ – jfriend00

Các vấn đề liên quan