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

JavaScript中调用async函数得到Promise { <pending> } 如何解决?

JavaScript async函数返回值问题解答

问题原因

  1. 所有async函数的返回值都会被自动包装为Promise对象:函数内部return的普通值会作为Promise resolve的结果,函数抛出的错误会作为Promise reject的原因。
  2. 第一种写法中直接调用getData()后立即打印结果,此时异步操作还未执行完成,Promise处于pending状态,因此控制台输出Promise { <pending> }。
  3. 把打印逻辑放在await语句之后时,await会暂停当前async函数的执行,等待后续Promise执行完成并拿到resolve结果后,才会执行后续的打印逻辑,因此可以正常输出预期值。
    补充:你调用someService时仅传入1个参数,但该函数定义接收3个入参,需要注意参数匹配是否符合业务逻辑要求。

正确获取async函数返回值的方法

有两种通用方案可以拿到async函数的执行结果:

方案1:使用await接收

await只能在async函数内部使用,新版浏览器/Node.js环境也支持ES模块下的顶层await:

顶层await写法(ES模块支持)

const data = await getData()
console.log(data)

兼容旧环境的自执行async函数写法

;(async () => {
  try {
    const data = await getData()
    console.log(data)
  } catch (error) {
    console.log('请求出错:', error)
  }
})()

方案2:使用.then()链式调用

getData()
  .then(data => {
    console.log(data)
  })
  .catch(error => {
    console.log('请求出错:', error)
  })

注意:你当前的getData函数在catch错误后仅打印日志没有抛出错误,若需要外层感知到请求失败,可在catch块中添加throw error语句,否则请求出错时外层拿到的结果会是undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:27:04