Tôi đang gặp khó khăn khi hiểu chính xác cách hoạt động của process.nextTick
. Tôi nghĩ tôi đã hiểu, nhưng tôi dường như không thể tái tạo như thế nào tôi cảm thấy điều này nên làm việc:hiểu hàng đợi sự kiện node.js và process.nextTick
var handler = function(req, res) {
res.writeHead(200, {'Content-type' : 'text/html'});
foo(function() {
console.log("bar");
});
console.log("received");
res.end("Hello, world!");
}
function foo(callback) {
var i = 0;
while(i<1000000000) i++;
process.nextTick(callback);
}
require('http').createServer(handler).listen(3000);
Trong khi foo
được vòng lặp, tôi sẽ gửi qua một vài yêu cầu, giả định rằng handler
sẽ được xếp hàng nhiều lần đằng sau foo
với callback
chỉ được nạp khi foo
hoàn tất.
Nếu tôi đúng về cách làm việc này, tôi giả sử kết quả sẽ trông như thế này:
received
received
received
received
bar
bar
bar
bar
Nhưng nó không, nó chỉ là tuần tự:
received
bar
received
bar
received
bar
received
bar
tôi thấy rằng foo
đang quay trở lại trước khi thực hiện callback
được mong đợi, nhưng có vẻ như callback
là TIẾP THEO trong hàng, thay vì ở cuối hàng đợi, đằng sau tất cả yêu cầu sắp tới. Đó có phải là cách hoạt động không? Có lẽ tôi không hiểu chính xác hàng đợi sự kiện trong nút hoạt động như thế nào. Và xin đừng chỉ cho tôi here. Cảm ơn.
Không, 'setTimeout' hoạt động giống như vậy. Tôi đoán tôi thực sự hỏi làm thế nào tôi phải bắt đầu xử lý các yêu cầu http trước khi một yêu cầu trước đó được hoàn thành. – alf
Thực ra, tôi nhận ra rằng 'setTimeout' thực hiện chính xác những gì tôi đang tìm kiếm, vì vậy tôi xin lỗi. Nhưng chính xác thì 'process.nextTick' là gì nếu nó không cho phép xen kẽ các nhiệm vụ chuyên sâu của CPU và xử lý http? – alf
"không phải ở cuối của đánh dấu" - vì vậy, là có một cách để đẩy một chức năng tùy ý ở cuối hàng đợi sự kiện? Phương thức 'setTimeout (fn, 0)' có được đề xuất hay chỉ là giải pháp thay thế? – incarnate