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

如何合并两个JavaScript Axios请求返回的独立结果集?

解决Axios多请求数据合并问题

先修正你的基础代码

你的getdata函数和调用逻辑有两个关键问题:

  1. getdata没有返回请求到的数据,调用后拿到的只是一个未兑现的Promise
  2. 调用getdata时没加await,所以data1、data2不是实际数据,而是Promise对象

先把代码修正为可正常获取数据的版本:

const axios = require('axios');

async function getdata(urlString) {
    try {
      const response = await axios.get(urlString);
      // 返回接口返回的核心数据,这里默认取response.data,可根据实际接口结构调整
      return response.data;
    } catch (error) {
      console.error(error);
      // 出错时返回空数组/对象,避免后续合并逻辑报错
      return [];
    }
}

// 所有需要await的操作必须放在async函数里执行
async function fetchAndMergeData() {
     const urlString1 = 'https://www.recreation.gov/api/permits/233393/availability/month?start_date=2023-07-01T00:00:00.000Z&commercial_acct=false&is_lottery=false';
     // 注意你原代码里两个url的日期相同,这里改成8月作为示例
     const urlString2 = 'https://www.recreation.gov/api/permits/233393/availability/month?start_date=2023-08-01T00:00:00.000Z&commercial_acct=false&is_lottery=false';
    // 用await拿到实际的接口返回数据
    const data1 = await getdata(urlString1);
    const data2 = await getdata(urlString2);

    // 这里开始执行数据合并逻辑
}

// 执行主函数
fetchAndMergeData();

根据数据结构选择合并方法

情况1:返回的数据是纯数组

如果data1和data2都是数组(比如每个请求返回的是日期条目数组),直接用以下两种方法合并:

// 方法1:使用concat
const mergedData = data1.concat(data2);

// 方法2:使用扩展运算符(更简洁)
const mergedData = [...data1, ...data2];

情况2:返回的数据是嵌套对象(对应你调用的recreation.gov接口)

该接口返回的是包含availability字段的对象,核心数据在availability数组里,这时要针对这个数组做合并:

const mergedData = {
  // 保留第一个请求的其他基础字段,也可按需合并
  ...data1,
  // 合并两个请求的availability数组
  availability: [...data1.availability, ...data2.availability]
};

情况3:返回的是平面对象

如果是无嵌套的平面对象,合并时会自动覆盖重复属性(后请求的数据覆盖前一个):

const mergedData = {...data1, ...data2};

额外优化:批量处理多月份请求

如果要查询连续多个月份,不用逐个写请求,可自动生成请求列表并行处理:

async function fetchAndMergeData(startMonth, endMonth) {
  // 生成指定月份范围的请求URL列表
  const urls = [];
  for (let month = startMonth; month <= endMonth; month++) {
    const dateStr = `2023-${month.toString().padStart(2, '0')}-01T00:00:00.000Z`;
    const url = `https://www.recreation.gov/api/permits/233393/availability/month?start_date=${dateStr}&commercial_acct=false&is_lottery=false`;
    urls.push(url);
  }

  // 并行发起所有请求,比串行请求效率更高
  const allData = await Promise.all(urls.map(url => getdata(url)));

  // 合并所有请求的availability数据
  const mergedData = {
    ...allData[0],
    availability: allData.flatMap(item => item.availability || [])
  };

  console.log('合并后的数据:', mergedData);
  return mergedData;
}

// 调用示例:查询2023年7-9月的数据
fetchAndMergeData(7, 9);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:53:20