一尘不染

了解node.js事件队列和process.nextTick

node.js

我无法确切了解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将排队几次身后foocallback只在被排队foo完成。

如果我对它的工作方式是正确的,我认为结果将如下所示:

received
received
received
received
bar
bar
bar
bar

但这不是连续的:

received
bar
received
bar
received
bar
received
bar

我看到这foo是在执行之前返回的,callback这是预期的,但似乎callback是NEXT在行,而不是在队列的末尾,在所有请求的后面。这是它的工作方式吗?也许我只是不了解节点中事件队列的工作原理。而且请不要在这里指点我。谢谢。


阅读 186

收藏
2020-07-07

共1个答案

一尘不染

process.nextTick将该回调放在将要执行的下一个刻度上,而不是在刻度队列的末尾。

Node.js文档(http://nodejs.org/api/process.html#process_process_nexttick_callback)说:“它通常在任何其他I
/ O事件触发之前运行,但是有一些例外。”

setTimeout(callback,0)可能会像您描述的那样工作。

2020-07-07