You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中async函数返回Promise:为何await g()输出42而非Promise实例?

为什么async函数返回Promise时,await后得到的是最终值而非Promise?

先看你给出的代码示例:

let f = async function () { return 42; }
let g = async function () { return new Promise((resolve, reject) => resolve(42)); }

f()
-> Promise { ... }

await f()
-> 42

g()
-> Promise { ... }

await g()
-> 42

你猜的没错,async函数确实会和内部返回的Promise做「合并」,这是ES标准里明确规定的async函数行为:

  • 当async函数返回普通值(比如示例里的42),它会自动把这个值包装成一个resolved状态的Promise,所以直接调用f()得到的是Promise对象,await会提取出这个Promise内部的42。
  • 当async函数返回的本身就是一个Promise对象(比如g()里的返回值),async函数不会把这个Promise再包一层新的Promise,而是直接「接管」这个Promise的状态:如果内部的Promise resolved,async函数返回的Promise也会resolved到同一个值;如果内部Promise rejected,async返回的Promise也会rejected。

简单说,async函数的返回逻辑本质是:它会把返回值转换成一个Promise——如果返回值是thenable(比如Promise),就等待这个thenable完成,然后用它的结果作为自己的Promise结果;如果是普通值,就直接resolve这个值。

所以不管你在async函数里返回普通值还是Promise,await它的返回结果时,都会拿到最终的resolved值,而不是Promise对象本身。

内容的提问来源于stack exchange,提问作者elplatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:05:14