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

如何将循环调用axios POST请求的所有响应合并为一个对象?

解决多POST请求响应合并为单个对象的问题

原代码的问题

  • 循环内部每次重置promises数组,最终数组仅保留最后一个请求的Promise
  • 在push中使用await导致请求串行执行,大幅降低效率
  • 未收集响应数据,仅做打印输出,无法进行合并操作

修正后的实现方案

步骤说明

  1. 批量创建所有请求的Promise(并行发起,提升效率)
  2. 用Promise.all等待所有请求完成,获取全部响应数据
  3. 将响应数据合并为单个对象(使用唯一标识作为键,避免冲突)

代码示例

// 1. 生成所有请求的Promise数组,并行发起请求
const promises = availableSpot.map(spot => {
  const postBody2 = {
    PropertyGuid: spot.propertyguid,
    ZoneGuid: spot.zoneguid,
    BookingStartUTC: "2022-11-10T18:15:00",
    BookingEndUTC: "2022-11-10T20:15:00",
    FilterAmenities: "",
    SpotGuid: null,
    UnitGuid: null,
  };
  // 返回Promise并直接提取响应数据
  return axios.post(searchZoneUrl, postBody2, requestMetadata2)
    .then(response => response.data);
});

// 2. 等待所有请求完成,获取全部响应结果
const allResponses = await Promise.all(promises);

// 3. 合并为单个对象(用PropertyGuid+ZoneGuid作为唯一键)
const mergedResult = {};
availableSpot.forEach((spot, index) => {
  const uniqueKey = `${spot.propertyguid}-${spot.zoneguid}`;
  mergedResult[uniqueKey] = allResponses[index];
});

// 合并后的对象,可直接用于后续逻辑
console.log(mergedResult);

可选合并方式

如果不需要唯一键,只是想把所有响应的属性合并到一个对象中(注意:重复属性会被后续响应覆盖),可以用:

const mergedResult = Object.assign({}, ...allResponses);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:15:29