Promise.resolve().then(() => {
console.log('promise1');
const timer2 = setTimeout(() => {
console.log('timer2')
}, 0)
});
const timer1 = setTimeout(() => {
console.log('timer1')
Promise.resolve().then(() => {
console.log('promise2')
})
}, 0)
console.log('start');
输出结果如下:
start promise1 timer1 promise2 timer2
代码执行过程如下:
1首先,Promise.resolve().then是一个微任务,加入微任务队列
2执行timer1,它是一个宏任务,加入宏任务队列
3继续执行下面的同步代码,打印出start
4这样第一轮宏任务就执行完了,开始执行微任务Promise.resolve().then,打印出promise1
5遇到timer2,它是一个宏任务,将其加入宏任务队列,此时宏任务队列有两个任务,分别是timer1、timer2;
6这样第一轮微任务就执行完了,开始执行第二轮宏任务,首先执行定时器timer1,打印timer1;
7遇到Promise.resolve().then,它是一个微任务,加入微任务队列
8开始执行微任务队列中的任务,打印promise2;
9最后执行宏任务timer2定时器,打印出timer2;