首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘`setTimeout`’和‘`setImmediate`’的区别

‘`setTimeout`’和‘`setImmediate`’的区别
EN

Stack Overflow用户
提问于 2016-06-23 07:36:47
回答 2查看 3.5K关注 0票数 2

nodejs文档说

在I/O事件回调之后,以及在触发setTimeout和setInterval设置的计时器之前,调度“立即”执行回调。返回一个immediateObject,以便可能与clearImmediate一起使用。

但我编写的测试代码如下:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-23 08:02:50

SetTimeOut -这种类型的函数将在设定时间后调用,在您的情况下为0,但它遵循事件循环。事件循环不能保证它在0秒钟后才能工作。实际上,它只保证函数在完成设定时间后才会被调用。

但是,当节点事件队列可以随意使用回调函数时,可以在完成时间后随时调用函数。

源来理解事件循环- https://www.youtube.com/watch?v=8aGhZQkoFbQ

SetImmediate -当它进入堆栈时将被调用,并且不会遵循事件循环中的回调循环。

票数 3
EN

Stack Overflow用户

发布于 2019-01-10 09:36:43

在setTimeout()上使用setTimeout()的主要优点是,如果在I/O周期中调度,则总是在任何计时器之前执行setImmediate(),这与存在多少定时器无关。

但是,如果在主模块中执行,则执行顺序将是不确定的,并取决于流程的性能。

有关更多信息,请参见https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37985065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档