面试时遇到相关的执行顺序问题:
console.log(1)
async function async1() {
console.log(8);
await async2();
console.log(9);
}
setTimeout(() => {
console.log(2)
}, 0)
async function async2() {
console.log(10);
}
async1()
new Promise((resolve, reject) => {
resolve()
})
.then(() => {
console.log(3)
})
.then(() => {
console.log(5)
})
new Promise((resolve, reject) => {
resolve()
})
.then(() => {
console.log(4)
})
.then(() => {
console.log(6)
})
console.log(7)
首先我们需要明确事件机制,宏任务与微任务
宏任务:包括整体代码script(外层的同步代码),setTimeout,setInterval
微任务:Promise.then(非new Promise),process.nextTick(node中)
其次需要明确执行顺序
执行顺序是先执行同步任务,然后微任务,再执行宏任务。
(我自己总结了一个口诀:最外层的先打印,async的看使用,Promise 1 2 then ,setTimeout放最后,若有多个setTimeout,注意setTimeout的时间)(口诀看个人情况,理解记忆)
结果:
欢迎补充,大家一起进步。