//代码的输出顺序
console.log('begin')
setTimeout(()=>{
console.log('setTimeout 1')
Promise.resolve().then(()=>{
console.log('promise 1');
setTimeout(()=>{
console.log('setTimeout 2 between promise1&2')
})
}).then(()=>{
console.log('promise 2')
})
}, 0)
console.log('end')
输出结果为:
begin
end
setTimeout 1
promise 1
promise 2
setTimeout 2 between promise1&2
分析:
1、首先执行同步代码块,将setTimeout放到宏任务队列中,按顺序输出begin 和 end。
2、执行完同步任务,取出宏任务,执行同步代码输出setTimeout 1,将then的回调函数放入微任务队列
3、执行微任务,输出promise 1,将setTimeout放到宏任务队列中后,同步执行下一个then,将回调函数放入微任务队列,然后清空微任务,输出promise2.
4、取宏任务执行setTimeout 2 between promise1&2