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

为什么我的async异步函数返回Promise { <pending> }而非实际值?

问题原因

  • 所有async函数的返回值默认是Promise对象,你在同步代码中直接调用async函数时,函数内部的异步逻辑(await语句)还未执行完成,Promise处于未决议的pending状态,所以打印结果只能看到Promise { <pending> }。
  • 你示例中最后一行console.log("PPPP", getdata() )是同步执行的,且调用getdata时未传入参数,内部await params逻辑没有完成,自然拿不到最终返回值。
  • 你在params事件回调中调用getdata(formData)时没有加await或者通过then监听结果,也无法直接拿到返回的实际数据。

解决方案

获取async函数的返回值必须通过异步的方式,有两种常用写法:

方式1:在async作用域内使用await接收返回值

// 1. 同步位置调用需要放在立即执行async函数中
(async () => {
  // 记得传入正确的参数
  const data = await getdata({
    'start-time': '2021-11-29 08:54:00',
    'end-time': '2021-11-29 10:54:00',
    'entity-type': 'lun',
    metric: 'throughput'
  })
  console.log("PPPP", data) // 这里可以拿到实际返回值
})()

// 2. 本身在async回调中的场景,直接加await即可
io.on("connection", async (data) => {
  data.on("token", (token) => {
    console.log(">>", token);
  });
  data.on("params", async (params) => {
    let formData = await params
    // 加await接收返回值
    const result = await getdata(formData)
    console.log("getdata返回结果", result)
  })
})

方式2:通过Promise.then()链式调用接收结果

getdata(你的参数).then(res => {
  console.log("PPPP", res)
}).catch(err => {
  // 可通过catch捕获异步过程中的报错
  console.error("调用出错", err)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:03