如何循环从大数组中分批取指定数量ID发送API请求
实现思路
核心是把大ID数组按照固定长度(此处为100)切分为多个小数组,再逐个遍历小数组发起请求即可。
核心步骤
- 确定单次请求的最大ID传输数量,此处固定为100
- 遍历原始大ID数组,按步长100进行切片,每次切出最多100个ID的子数组
- 将每个子数组的ID用逗号拼接为字符串,拼接到接口URL的ids参数后发起请求
- 所有子数组处理完成即结束整个流程
代码示例(JavaScript版本,其他语言逻辑完全通用)
// 模拟你的大ID数组 const bigIdArray = Array.from({length: 1234}, (_, i) => String(i+1).padStart(6, '0')); const BATCH_SIZE = 100; // 单次最大传参数量 // 分批处理函数 async function processAllIds() { // 按批次切分数组 for (let i = 0; i < bigIdArray.length; i += BATCH_SIZE) { // 每次切取从i到i+100的元素,最后一批不足100也能正常取到剩余部分 const batchIds = bigIdArray.slice(i, i + BATCH_SIZE); // 拼接成ids参数 const idsParam = batchIds.join(','); const requestUrl = `https://your-api-endpoint?ids=${idsParam}`; // 发起请求,可根据需求调整返回结果、错误处理逻辑 try { const response = await fetch(requestUrl); const result = await response.json(); console.log(`第${Math.ceil(i/BATCH_SIZE + 1)}批请求处理完成`, result); } catch (err) { console.error(`第${Math.ceil(i/BATCH_SIZE + 1)}批请求出错`, err); // 可在此处添加错误重试逻辑,或跳过错误继续处理下一批 } } console.log('所有ID请求处理完成'); } // 执行函数 processAllIds();
补充说明
- 如果需要提升处理效率,可以把所有批次的请求Promise存入数组,用
Promise.all或者并发控制工具处理,注意不要超出接口的频率限制即可 - 最后一批ID数量不足100时,
slice方法会自动取到数组末尾,不需要额外做边界判断 - 如果ID包含特殊字符需要编码,拼接参数的时候可以用
encodeURIComponent处理拼接后的ids字符串
内容的提问来源于stack exchange,提问作者Jack G
相关产品推荐
相关产品推荐

