js 宏任务和微任务的执行顺序

396 阅读1分钟

宏任务: setTimeout, setInterval, setImmediate, I/O, UI rendering

微任务: Promises.(then catch finally), process.nextTick, MutationObserver

进入一个代码块,无论setTimeout在哪一行,都会最后执行。而多个setTimeout,位于前面的先执行

js引擎执行时,必须先把代码块的同步代码执行完毕,才考虑是否执行异步队列的任务代码,

每次执行完同步代码,必先查询一个异步队列里面是否含有微任务,如果有先把微任务依次执行完,后再去执行宏任务。

setTimeout(() => console.log(1))
new Promise((resolve) => {
    resolve()
    console.log(2)
}).then(() => {
    console.log(3)
})
console.log(4)

结果是 2 4 3 1

setTimeout Promises 当代码块,含有 setTimeout 和 Promises,先执行Promises同步操作,第二执行常规同步代码,再执行Promises.then(),最后执行setTimeout