js同步异步代码执行顺序测试

异步笔试题,请写出下面代码的运行结果:

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事件循环机制
  • 同步异步执行顺序
  • 微任务宏任务
  • async await知识

答案解析和原理戳这里

我的问题:async await相关的执行顺序理解错误
总结记录:async await相当于是一个promise的语法糖,转换成promise再结合微任务宏任务相关知识可以得出正确答案

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');
        })
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容