了解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循环时,我会发送多个请求,假设handler将在foo后面排队几次,只有当foo完成时, callback才会被排队。

如果我对这个方法是正确的,我认为结果将如下所示:

 received received received received bar bar bar bar 

但事实并非如此,这只是连续的:

 received bar received bar received bar received bar 

我看到foo在执行预期的callback之前正在返回,但似乎callback是在线,而不是在队列的末尾,在所有的请求后面。是这样的吗? 也许我只是不明白节点中的事件队列是如何工作的。 请不要在这里指出我的意思。 谢谢。

process.nextTick将callback放在要执行的下一个滴答,而不是在滴答排队的末尾。

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了解更多背景&#x3002;

使用process.nextTick当你想在任何IO之前调用一些代码,但在调用上下文返回后(通常是因为你想在事件发射器上注册监听器,并且需要返回创build的发射器,然后才能注册)。