- 宏任务:
整个scritpt, setTimeout, setInterval - 微任务:
Promise.then, Promise.catch, await下一行后的内容
我们可以理解为紧跟着await后面的语句相当于放到了new Promise中执行,下一行及之后的语句相当于放在Promise.then中, 及放到微任务队列中
执行方式: script语句作为基本宏任务优先直接执行,再执行所有微任务队列;再下一个宏任务,所有微任务队列交替执行
例如:
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(function() {
console.log("setTimeout");
}, 0);
async1();
new Promise(function(resolve) {
console.log("promise1");
resolve();
}).then(function() {
console.log("promise2");
});
console.log('script end')
// 执行过程
第一轮执行
script start
async1 start
async2
promise1
script end
宏任务:setTimeout
微任务:async1 end, promise2
第二轮执行
script start
async1 start
async2
promise1
script end
async1 end // 先微任务再宏任务
promise2
setTimeout