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

如何编写函数解析含嵌套Promise数组的对象并返回解析结果?

搞定嵌套Promise数组对象的解析问题

嘿,这有个直接能用的resolvePromisesFunction实现,完全匹配你的需求:

function resolvePromisesFunction(obj) {
  // 把对象拆成键值对数组,逐个处理每个属性的Promise数组
  const promiseEntries = Object.entries(obj).map(async ([key, promisesArr]) => {
    // 用Promise.all解析当前数组里的所有Promise
    const resolvedArr = await Promise.all(promisesArr);
    // 返回键和解析后的数组,方便后续转回对象
    return [key, resolvedArr];
  });

  // 等所有属性的Promise都解析完,再把结果转成目标对象
  return Promise.all(promiseEntries).then(resolvedEntries => Object.fromEntries(resolvedEntries));
}

为啥这么写?给你掰扯清楚:

  1. 拆对象:用Object.entries(obj)把原对象转换成[键名, Promise数组]的格式,这样能遍历处理每个属性。
  2. 解析单个属性的Promise数组:对每个键值对,用async/await配合Promise.all,把对应的Promise数组全部解析成普通值数组。
  3. 汇总结果转对象:把所有处理后的键值对Promise收集起来,用Promise.all等全部处理完成,最后用Object.fromEntries把数组格式转回我们需要的对象结构。

测试一下看效果

用你给的示例代码跑一遍:

let promise = new Promise(resolve => setTimeout(resolve, 1000, 'url'));
let object = { 
  registration: [promise, promise, promise], 
  contract: [promise, promise, promise], 
  businessLicense: [promise, promise, promise], 
  businessPlan: [promise, promise, promise] 
};

resolvePromisesFunction(object).then(result => console.log(result));

等1秒左右,控制台就会输出你想要的结果:

{ 
  registration: [ 'url', 'url', 'url' ], 
  contract: [ 'url', 'url', 'url' ], 
  businessLicense: [ 'url', 'url', 'url' ], 
  businessPlan: [ 'url', 'url', 'url' ] 
}

如果你不喜欢async/await,也可以用纯Promise链的写法,功能完全一样:

function resolvePromisesFunction(obj) {
  return Promise.all(
    Object.entries(obj).map(([key, promisesArr]) => 
      Promise.all(promisesArr).then(resolvedArr => [key, resolvedArr])
    )
  ).then(resolvedEntries => Object.fromEntries(resolvedEntries));
}

选哪个全看你个人代码风格偏好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:34