了解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了解更多背景。
使用process.nextTick当你想在任何IO之前调用一些代码,但在调用上下文返回后(通常是因为你想在事件发射器上注册监听器,并且需要返回创build的发射器,然后才能注册)。
- 强制x客户端等待node.js中客户端y的callback的最佳实践
- Nodejs / Javascriptcallback使用 – 等待API调用
- Node.js – 更好的方式来pipe理JavaScript范围之间的callback?
- node.js承诺:如何找出哪个迭代抛出.catch语句中的exception?
- 返回数据一旦获取JavaScript
- Javascript是同步(阻塞)还是asynchronous(非阻塞)默认情况下
- 在nodeJs中避免callback地狱/将variables传递给内部函数
- 从Node.Js中的一系列callback函数返回结果
- 'function foo(callback)'和'foo(arg1,arg2,function(err,data))'之间有什么区别?