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

Async function为何不返回实际值而是返回promise?

问题成因解释
  • ECMAScript 规范明确规定,所有async函数的返回值都会被自动包装为 Promise 对象,无论函数内部 return 的是普通值、还是异步操作的结果,都会遵循这个规则:如果 return 普通值,会被包装为已兑现(fulfilled)状态的 Promise;如果函数内部抛出错误,会返回已拒绝(rejected)状态的 Promise。
  • 你对await的作用理解没有错:await会暂停当前 async 函数的执行,等待后方 Promise 兑现后,将兑现结果赋值给左侧变量,所以你在函数内部拿到的url确实是字符串类型。
  • 外部调用 async 函数时,不会等待函数内部异步逻辑执行完成再返回结果:调用getUrl()时,函数执行到await ngrok.connect(3000)就会暂时挂起,先将一个 pending 状态的 Promise 返回给调用方,等内部所有异步逻辑执行完毕、return 具体值之后,这个返回的 Promise 才会变为 fulfilled 状态,此时才能拿到最终的字符串类型 URL。
正确获取返回值的方式

如果要在外部拿到字符串类型的 URL,有两种常用实现方案:

  1. 用then链式调用处理结果
getUrl().then(url => {
  // 此处的 url 为字符串类型,可以正常使用
  console.log(url)
})
  1. 在另一个 async 函数内用await调用
async function main() {
  const url = await getUrl()
  // 此处的 url 为字符串类型
  console.log(url)
}
main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:39:00