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

JavaScript使用await后仍无法提取Promise返回值该如何解决

问题解答

现有代码的问题

你当前的实现逻辑没有错误,只是取值方式不对:
async函数执行后默认返回Promise对象,你直接将fetchData()的返回值赋值给result变量,拿到的是处于pending状态的Promise实例,而非函数内部return的数组值。你打印时看到的fulfilled状态和value是控制台异步更新的结果,同步代码中无法直接读取该value属性。

正确的取值方式

有两种常用的取值方案:

方案1:在async执行上下文中使用await读取

如果你可以在async函数内处理数据,直接用await等待Promise执行完成即可拿到返回值:

async function fetchData() {
  try {
    var params = { Key: { chart_name: "cambridge_rent" }, TableName: "charts" };
    const data = await docClient.get(params).promise();
    return data.Item.values;
  } catch (err) {
    console.log("Failure", err.message);
    // 可选:抛出错误让上层捕获处理
    // throw err
  }
}

async function processData() {
  const result = await fetchData();
  // 此处可正常操作数组
  console.log(result.length); // 输出95
  console.log(result); // 目标数组
}

processData();

方案2:通过Promise的.then回调读取

如果不方便在async函数内处理,用then回调获取执行结果:

fetchData().then(result => {
  // 回调内部即可拿到数组做后续处理
  console.log(result.length);
  // 所有依赖该数组的逻辑都写在这个回调范围内
}).catch(err => {
  // 额外补充错误捕获,避免未处理的Promise异常
  console.error('数据处理失败', err);
});

注意事项

  • 你无法在全局同步代码中直接拿到这个异步返回的数组,所有依赖该数组的逻辑必须放在await之后或者.then回调内部
  • 你原有fetchData的catch分支会返回undefined,建议要么抛出错误让上层处理,要么返回默认空数组做兜底,避免后续调用时出现值为undefined的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:12:02