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

为什么await Promise.all()后仍存在pending状态的Promise?

问题根因

你传入Promise.all()的promisesArray数组的元素不是Promise类型,而是普通对象,Promise.all只会等待数组中本身是Promise的元素执行完成,不会主动处理对象内部嵌套的未完成Promise。


具体错误分析

你写的map逻辑返回的是普通对象,而非Promise:

const promisesArray = OldDataArray.map((item) => {
  let newData = downloadMoreDetails(item.id, item.group); // 这里得到的是未完成的Promise
  return { // 直接返回普通对象,对象内data属性还是pending状态的Promise
    id: item.id,
    data: newData,
  };
});

此时promisesArray是对象数组,不是Promise数组,await Promise.all(promisesArray)会直接把这些普通对象当成已完成的值返回,不会等待对象内部data对应的Promise执行完成,因此最终输出的结果里data仍然是pending状态。


修复方案

调整map逻辑,让数组元素为Promise类型,Promise.all就会等待所有异步操作完成再返回结果:

const storeData = async (OldDataArray) => {
  try {
      const promisesArray = OldDataArray.map(async (item) => {
      // 等待异步请求完成,拿到真实的data值再组装对象
      let newData = await downloadMoreDetails(item.id, item.group);
      return {
        id: item.id,
        data: newData,
      };
    });
    const newDataArray = await Promise.all(promisesArray);
    return newDataArray;
  } catch (error) {
    console.log(error)
  }
};

修改后promisesArray的元素是async函数返回的Promise实例,Promise.all会等待所有Promise执行完成,最终返回的newDataArray里的data就是请求完成后的实际值,不会再出现pending状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:45:03