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

如何保存多API请求的JSON响应?(Azure DevOps WIT场景)

问题描述

我通过API请求获取了大量工作项Id:

const data = { query: "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'User Story' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" };
const list = await this.post<any>('wit/wiql', data);
let ids: string[] = [];
for (let i = 0; i < list.data.workItems.length; i++) {
  ids.push(list.data.workItems[i].id);
}

需要使用这些Id调用另一个API端点,但该端点单次请求最多接受200个Id。我尝试分批发起请求并保存结果,代码如下:

let ids2: string[] = [];
let userStories;
for (const id of ids) {
  if (ids2.length == 200) {
    userStories += await this.get<any>(`wit/workitems?ids=${ids2}`);
    ids2.splice(0);
  }
  ids2.push(id);
}
if (ids2.length > 0) {
  userStories += await this.get<any>(`wit/workitems?ids=${ids2}`);
}

但得到的userStories值为'undefined[object Object][object Object]',尝试多种保存方式都无效,请问如何正确保存数据以便后续轻松使用?


解决方案

问题原因

  1. 未初始化变量:userStories未设置初始值,默认是undefined,使用+=拼接时会将其转为字符串,导致结果开头出现undefined。
  2. 对象错误拼接:API返回的是对象/数组,直接用+=会将其转为[object Object]字符串,而非合并数据。
  3. 分批逻辑繁琐:逐个添加ID到临时数组的方式不够高效,且容易出错。

修正代码

// 初始化空数组存储所有工作项
const userStories: any[] = [];
const batchSize = 200;

// 按200个ID为一批拆分原数组
for (let i = 0; i < ids.length; i += batchSize) {
  const batchIds = ids.slice(i, i + batchSize);
  // 调用API,确保ID参数是逗号分隔的字符串
  const response = await this.get<any>(`wit/workitems?ids=${batchIds.join(',')}`);
  // 将返回的工作项数组合并到总数组(根据实际API返回结构调整response.data的路径)
  userStories.push(...response.data);
}

// 此时userStories是包含所有工作项的平级数组,可直接用于后续处理

关键说明

  • 数组拆分优化:用slice直接拆分原ID数组,比手动维护临时数组更简洁可靠。
  • 正确合并数据:使用push(...array)将每批返回的工作项元素展开添加到总数组,避免嵌套数组。
  • 参数格式正确:通过batchIds.join(',')生成逗号分隔的ID字符串,符合API参数要求。
  • 类型可选优化:如果使用TypeScript,建议定义工作项接口替换any,提升代码类型安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:35:22