nodejs 文档说
安排在 I/O 事件回调之后、在触发 setTimeout 和 setInterval 设置的计时器之前“立即”执行回调。返回一个可与clearImmediate 一起使用的immediateObject。
但是我写了一个测试代码如下:
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
之前输出
最佳答案
SetTimeOut
- 这种类型的函数将在设定时间后调用,在您的情况下为 0,但它遵循事件循环。并且事件循环并不保证它会在 0 秒后起作用。事实上它只保证函数在完成设定的时间后被调用。
但是,当 Node 事件队列空闲以占用回调函数时,函数可以在完成时间后随时调用
了解事件循环的来源 - https://www.youtube.com/watch?v=8aGhZQkoFbQ
SetImmediate
- 这将在进入堆栈时被调用,并且不遵循事件循环中的回调周期。
关于node.js - `setTimeout` 和 `setImmediate` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985065/