请解释 async 函数的返回值是什么?

推荐答案

async 函数的返回值始终是一个 Promise 对象。

  • 如果 async 函数的返回值是非 Promise 值(例如数字、字符串、对象等),那么这个值会被 Promise.resolve() 包裹,生成一个新的 fulfilled 状态的 Promise,其 resolved 值就是该非 Promise 值。
  • 如果 async 函数的返回值本身就是一个 Promise 对象,那么 async 函数返回的 Promise 的状态和结果将会与返回的 Promise 对象保持一致。
  • 如果 async 函数中抛出了错误(使用 throw 语句),那么 async 函数返回的 Promise 将会处于 rejected 状态,拒绝原因为抛出的错误。

本题详细解读

async 函数的本质

async 关键字用于声明一个异步函数。它是一种更简洁、易于理解的方式来处理 Promise。async 函数内部可以使用 await 关键字,暂停函数的执行,直到 await 后面的 Promise resolved 或 rejected。

返回值规则详解

  1. 返回非 Promise 值:

    在这个例子中,example1 返回的是一个数字 10。由于 example1 是一个 async 函数,实际上它返回的是 Promise.resolve(10),也就是一个状态为 fulfilled,值为 10 的 Promise。then 方法会等待 Promise 变为 fulfilled 状态并获取其值。

  2. 返回 Promise 对象:

    在这个例子中, example2 返回的是一个 Promise 对象。 async 函数返回的 Promise 的状态和结果与返回的 Promise 对象一致。 then 会等到内部 Promise resolve 后输出 "Hello"。

  3. 抛出错误:

    如果 async 函数内部抛出错误,则返回的 Promise 会变成 rejected 状态。我们可以使用 catch 方法捕获错误,并输出错误信息。

总结

  • async 函数的本质是返回一个 Promise 对象,这使得它可以使用 thencatch 来处理异步操作。
  • 返回值会被 Promise 包装的特性,是 async/await 语法能够以同步代码的风格来处理异步操作的关键。
纠错
反馈