详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
本文介绍了详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序,分享给大家,具体如下:先举一个比较典型的例子:这段代码输出的正确顺序是什么?在解释输出结果之前,我们来看几个概念:macro-task: script ,setTimeout, setInterval, setImmediate, I/O, UI rendering. micro-task: process.nextTick, Promise(原生),Object.observe,MutationObserver. 此时micro-task 中有两个任务按照优先级process.nextTick 高于 Promise。所以先输出7,再输出5整个过程描述起来像是同步操作,实际上是基于Event Loop的事件循环运行这段代码,结果是这样:。在新版的Node中,process.nextTick执行完后,会循环遍历setImmediate,将setImmediate都执行完毕后再跳出循环。所以两个setImmediate执行完后队列里只剩下第一个setImmediate里的process.nextTick。最后输出”强势插入”。观察者优先级在每次轮训检查中,各观察者的优先级分别是:idle观察者 > I/O观察者 > check观察者。
用户评论