微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 理解node.js事件队列和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循环时,我会发送几个请求,假设处理程序将在foo后面排队几次,只有当foo完成后才会将回调排入队列.

如果我对这是如何工作正确的,我认为结果将如下所示:

received
received
received
received
bar
bar
bar
bar

但它没有,它只是顺序的:

received
bar
received
bar
received
bar
received
bar

我看到foo在执行回调之前正在返回,这是预期的,但似乎回调是NEXT在行,而不是在队列的末尾,在所有请求进入后面.这是否有效?也许我只是不明白节点中的事件队列是如何工作的.请不要指向我here.谢谢.

解决方法

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

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

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

原文地址:https://www.jb51.cc/js/156845.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐