JavaScript async/await 中执行顺序问题

async function async1() {
     console.log("async1 start");
    await async2();
    console.log("async111 end"); // 为什么在 console.log("start")后执行
}
async function async2() {
    setTimeout(() => {
        console.log("timer")
    }, 0)
    console.log("async2")
}
async1()
console.log("start")

输出结果
async1 start
async2
start
async111 end
undefined
timer


第3个输出结果为什么是 start 而不是 async111 end
为什么 async1 函数还没有执行到第二个 console.log 就输出了调用 async1() 函数后面的 console.log("start")?

阅读 265
评论
    4 个回答

    async/await 是Promise的语法糖。

    await async2();
    console.log("async111 end"); 
    // 相当于
    Promise(()=>{
        async2(); // Promise中的函数是会立即执行的
    }).then(()=>{
        console.log("async111 end"); 
    })

    Promise.then 是微任务,是在执行完一个宏任务队列后再清空执行的。

      async1函数相当于:

      async function async1() {
          console.log("async1 start");
          async2().then(() => {
              console.log("async111 end"); // 为什么在 console.log("start")后执行
          })    
      }
        • 3.2k

        关于异步编程的顺序问题是老月经题了,天天都有人问。
        给你推荐阮一峰老师的三篇文章:

        1. async 函数的含义和用法

        只需要看其中的第五章:async 函数的用法,需要用到的前置知识是 Promise,自行搜索一下,反正只要遇到不懂的东西,搜就对了。

            撰写回答

            登录后参与交流、获取后续更新提醒

            相似问题
            推荐文章