宏任务与微任务
宏任务:setTimeout,setInterval,AJAX,DOM
微任务:Promise,async/await
1. 宏任务与微任务都是队列
2.微任务所有执行完才执行宏任务
3.await执行完后,跳出整个async函数
例子
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
async1 end
promise2
setTimeout
*/
1. 顺序执行,输出script start
2.执行async函数,输出async start,执行await后的函数,输出async2,跳出整个async函数
3.执行promise,构造时是同步的,所以执行promsie1,.then是异步的,存入队列
4.顺序执行script end
5.第一次事件循环结束
6.执行async1,打印async1 end
7.执行.then中的,打印promise2
8.最后执行宏任务setTimeout