这两者之间有什么区别,什么时候我会使用其中一个而不是另一个?
发布于 2017-03-07 19:27:17
一篇很棒的文章介绍了事件循环是如何工作的,并澄清了一些误解。http://voidcanvas.com/setimmediate-vs-nexttick-vs-settimeout/
引用这篇文章:
setImmediate
回调在I/O队列回调完成或超时后调用。setImmediate回调放在检查队列中,检查队列在I/O队列之后进行处理。
setTimeout(fn, 0)
回调放在定时器队列中,将在I/O回调和检查队列回调之后调用。作为事件循环,在每次迭代中首先处理计时器队列,因此将首先执行哪一个取决于哪个阶段事件循环。
发布于 2014-06-09 18:49:49
总是使用setImmediate
,除非你真的确定你需要setTimeout(,0)
(但我甚至不能想象,有什么用)。setImmediate
回调几乎总是在setTimeout(,0)
之前执行,除非在first tick和setImmediate
回调中调用。
发布于 2018-04-12 14:35:15
setTimeout(fn,0)可用于防止浏览器在大规模更新时冻结。例如,在websocket.onmessage中,您可能会更改setImmidiate,如果消息源源不断,则在使用html时,浏览器可能会冻结
https://stackoverflow.com/questions/24117267
复制相似问题