Promise, async await, 宏任务 微任务

52 阅读1分钟
  1. 宏任务: 整个scritpt, setTimeout, setInterval
  2. 微任务: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

参考文章 blog.csdn.net/flow_campho…