異步筆試題,請寫出下面代碼的運行結(jié)果:
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
*/
這道題考的知識點:
- js事件循環(huán)機制
- 同步異步執(zhí)行順序
- 微任務(wù)宏任務(wù)
- async await知識
我的問題:async await相關(guān)的執(zhí)行順序理解錯誤
總結(jié)記錄:async await相當于是一個promise的語法糖徘公,轉(zhuǎn)換成promise再結(jié)合微任務(wù)宏任務(wù)相關(guān)知識可以得出正確答案
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
// 等價于
async function async1() {
console.log('async1 start');
Promise.resolve(async2()).then(() => {
console.log('async1 end');
})
}