事件循环顺序
同步任务 ==》 异步任务( 微任务 ==》宏任务 )
常见宏任务、微任务
宏任务:setTimeout、setInterval
微任务:Promise.then() 、Promise.catch()
注意:Promise是宏,其方法是微
练习题
(1)
//输出结果:main Promise setTimeout
setTimeout(() => {
console.log('setTimeout')
}, 0)
Promise.resolve().then(() => {
console.log('Promise')
})
console.log('main')
(2)
//输出结果:main Promise1 Promise2 Promise3 setTimeout1 Promise4 setTimeout2
setTimeout(() => {
console.log('setTimeout1')
Promise.resolve().then(() => {
console.log('Promise4')
})
}, 0)
Promise.resolve().then(() => {
console.log('Promise1')
Promise.resolve().then(() => {
console.log('Promise2')
Promise.resolve().then(() => {
console.log('Promise3')
})
})
})
setTimeout(() => {
console.log('setTimeout2')
}, 0)
console.log('main')
由第2题可知,每轮循环都会执行一个宏任务以及所有的微任务(Promise得出);任务队列一定会保持先进先出的顺序执行(两个setTimeout得出)。