理解Node.js的事件队列和process.nextTick(understanding the

2019-09-01 03:32发布

我无法理解究竟是如何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是排在后面,而不是在队列的末尾,后面的所有的在未来的要求。那是在它的工作方式? 也许我只是不理解在节点事件队列究竟是如何工作的。 请不要点我在这里 。 谢谢。

Answer 1:

process.nextTick把回调对将要执行的,而不是在滴答队列末尾的下一个节拍。

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

的setTimeout(回调,0)可能会像你描述的工作了。



Answer 2:

你当然应该阅读提供的链接fgascon,也许

https://github.com/joyent/node/issues/3335更多的背景。

使用process.nextTick因为当你想要的任何IO之前调用一些代码,但调用上下文返回之后(通常是因为要在事件发射器注册听众和需要返回创建发射器之前,你可以注册任何东西)。



文章来源: understanding the node.js event queue and process.nextTick