Skip to content

两个函数弄懂 async await 执行顺序

测试

定义这两个函数

js
main()

async function main() {
  const res = await speak()
  console.log(res);
}

async function speak() {
  const res = await new Promise(resolve => {
    setTimeout(() => {
      resolve('11')
    }, 1000)
  })
  return '返回值'
}

经过测试会发现,过了 1s 后,打印的 res 值始终是 speak 函数 return 的返回值。

其实 async 函数本身会返回一个 Promise。上面的 speak 函数使用 Promise + then 函数的写法可以是:

这里的写法只是为了帮助理解

实际上 async 函数是 Promise 和 generator 函数的语法糖。

js
function speak() {
  return new Promise(o_resolve => {
    new Promise(i_resolve => {
      setTimeout(() => {
        i_resolve('11')
      }, 1000)
    }).then(value => {
      // const res = xxxx
      // 获取 return 的返回值 returnValue
      o_resolve(returnValue)
    })
  })
}

结论

async 函数的返回值应该是 await 函数内部 return 关键字后面的那个值。

Released under the MIT License.