我无法准确理解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
将排队几次落后foo
仅在foo
完成时才会使callback
排队。
如果我对如何工作正确的,我相信结果会是这样的:
received
received
received
received
bar
bar
bar
bar
但它不,它只是顺序:
received
bar
received
bar
received
bar
received
bar
我看到foo
在执行callback
之前正在返回,但这似乎是预期的,但callback
似乎是在下一行,而不是在队列的末尾,在所有请求的后面。这是它的工作方式吗?也许我只是不理解节点中事件队列的工作原理。请不要指点我here。谢谢。
不,'setTimeout'的行为方式是一样的。我想我真的在问我应该如何在前一个请求完成之前开始处理http请求。 – alf 2013-04-25 19:20:14
其实,我意识到'setTimeout'完全正是我想要的,所以我很抱歉。但是,如果不允许交互cpu密集型任务和http处理,那么“process.nextTick”究竟是什么? – alf 2013-05-01 08:30:58
“不在结尾处” - 所以,有没有办法在事件队列的末尾推送任意函数? 'setTimeout(fn,0)'是一种推荐的方式还是一种解决方法? – incarnate 2014-01-13 06:45:16