首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

nodejs的setTimeout(fn,0)和setImmediate谁先执行的问题

我们首先看一下下面这段代码 setTimeout(()=>{ console.log('setTimeout'); },0) setImmediate(()=>{ console.log('setImmedate...setTimeout是属于定时器阶段,setImmediate是属于check阶段。顺序上定时器阶段是比check更早被执行的。...在分析nodejs的setImmediate和setTimeout的文章中已经介绍过这两个函数对应的实现原理。这里就不细说了。其中setTimeout的实现代码里有一个很重要的细节。...nodejs启动的时候,会编译执行上面的代码,开始一个定时器,挂载一个setImmediate节点在队列。...这时候就会执行setImmediate的回调。所以,一开始的那段代码的输出结果是取决于启动定时器的时间到libuv执行定时器阶段是否过去了1毫秒。

1.5K20

setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop

笼统的知道setImmediate比setTimeout(fn, 0)先执行是不够的,因为有些情况下setTimeout(fn, 0)是会比setImmediate先执行的。...setImmediate和setTimeout 上面的这个流程说简单点就是在一个异步流程里,setImmediate会比定时器先执行,我们写点代码来试试: console.log('outer');...和我们前面讲的一样,setImmediate先执行了。...(() => { console.log('setImmediate'); }); }); 复制代码 这里setTimeout和setImmediate在readFile的回调里面...,由于readFile回调是I/O操作,他本身就在poll阶段,所以他里面的定时器只能进入下个timers阶段,但是setImmediate却可以在接下来的check阶段运行,所以setImmediate

83831

事件循环详解

(vue2.0已经废弃使用此API) setImmediate/setTimeout setImmediate为IE特有的,我们可以在IE浏览器环境下做测试 setImmediate(() => {...阶段 此阶段专门执行setImmediate的回调,当poll阶段进入空闲状态,并且setImmediate队列中有callback时,事件循环进入这个阶段 close阶段 当一个socket连接或者一个...') }) // => setImmediate -> timeout // or timeout -> setImmediate 例子代码地址 多运行几次,运行结果是不一定的,这取决于运行代码的环境。...console.log('timeout') }, 0) setImmediate(() => { console.log('setImmediate') }) }) //...=> setImmediate -> timeout 例子代码地址 回顾上面提到的阶段,在I/O事件的回调中,setImmediate的回调永远优先于setTimeout的回调执行。

58120
领券