nodejs文档说
在I/O事件回调之后,以及在触发setTimeout和setInterval设置的计时器之前,调度“立即”执行回调。返回一个immediateObject,以便可能与clearImmediate一起使用。
但我编写的测试代码如下:
server = http.createServer((req, res)->
res.end()
)
setImmediate(()->
console.log 'setImmediate'
)
setTimeout(()->
console.log 'setTimeout'
, 0)
process.nextTick(()->
console.log 'nextTick'
)
server.listen(8280, ()->
console.log 'i/o event'
)为什么setTimeout总是输出setImmediate
发布于 2016-06-23 08:02:50
SetTimeOut -这种类型的函数将在设定时间后调用,在您的情况下为0,但它遵循事件循环。事件循环不能保证它在0秒钟后才能工作。实际上,它只保证函数在完成设定时间后才会被调用。
但是,当节点事件队列可以随意使用回调函数时,可以在完成时间后随时调用函数。
源来理解事件循环- https://www.youtube.com/watch?v=8aGhZQkoFbQ
SetImmediate -当它进入堆栈时将被调用,并且不会遵循事件循环中的回调循环。
发布于 2019-01-10 09:36:43
在setTimeout()上使用setTimeout()的主要优点是,如果在I/O周期中调度,则总是在任何计时器之前执行setImmediate(),这与存在多少定时器无关。
但是,如果在主模块中执行,则执行顺序将是不确定的,并取决于流程的性能。
有关更多信息,请参见https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
https://stackoverflow.com/questions/37985065
复制相似问题