簡體   English   中英

理解node.js事件隊列和process.nextTick

[英]understanding the node.js event queue and process.nextTick

我無法准確理解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);

foo循環時,我將發送多個請求,假設handler將在foo后面排隊幾次,只有當foo完成時才會將callback排入隊列。

如果我對這是如何工作正確的,我認為結果將如下所示:

received
received
received
received
bar
bar
bar
bar

但事實並非如此,它只是順序的:

received
bar
received
bar
received
bar
received
bar

我看到foo在執行callback之前正在返回,這是預期的,但似乎callback是NEXT在行,而不是在隊列的末尾,在所有請求進入后面。這是否有效? 也許我只是不明白節點中的事件隊列是如何工作的。 請不要指我在這里 謝謝。

process.nextTick將回調放在將要執行的下一個tick上,而不是在tick隊列的末尾。

Node.js doc( http://nodejs.org/api/process.html#process_process_nexttick_callback )說:“它通常在任何其他I / O事件觸發之前運行,但也有一些例外情況。”

setTimeout(callback,0)可能更像你描述的那樣工作。

你當然應該閱讀fgascon提供的鏈接,也許

https://github.com/joyent/node/issues/3335獲取更多背景信息。

如果要在任何IO之前調用某些代碼,但是在調用上下文返回之后(通常是因為要在事件發射器上注冊偵聽器並且需要在注冊任何內容之前返回創建的發射器),請使用process.nextTick。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM