输出规则,优先输出同步任务,然后执行异步中的微任务,最后执行宏任务
优先级:
同步 大于 异步
异步--微任务 大于 异步--宏任务
微任务:Promise
宏任务:setTimeout setInterval
Promise本身是同步代码,通过.then方法才是异步微任务
遇见await 其后面的代码需要等待 所有的同步代码执行完然后执行后面的代码
await后面的函数会先执行一遍,然后就会跳出整个async函数来执行后面js栈的代码。seg
async function async1(){
console.log('async1 start');
await async2() //await后面的代码先不执行
console.log('async 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
async end
Promise2
setTimeout
*/