我无法确切了解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有callback只在被排队foo完成。
foo
handler
callback
如果我对它的工作方式是正确的,我认为结果将如下所示:
received received received received bar bar bar bar
但这不是连续的:
received bar received bar received bar received bar
我看到这foo是在执行之前返回的,callback这是预期的,但似乎callback是NEXT在行,而不是在队列的末尾,在所有请求的后面。这是它的工作方式吗?也许我只是不了解节点中事件队列的工作原理。而且请不要在这里指点我。谢谢。
process.nextTick将该回调放在将要执行的下一个刻度上,而不是在刻度队列的末尾。
Node.js文档(http://nodejs.org/api/process.html#process_process_nexttick_callback)说:“它通常在任何其他I / O事件触发之前运行,但是有一些例外。”
setTimeout(callback,0)可能会像您描述的那样工作。