JS中如何实现分批请求:完成一批后再执行下一批?
分批处理异步请求解决方案
核心思路
把所有请求按每10个一组拆分,利用async/await和Promise.all()实现:先发起当前批次的所有请求,等待全部完成后再处理下一批次。
代码实现
// 模拟单个请求函数,替换成你实际的请求逻辑 async function sendRequest(data) { // 这里替换为真实请求代码,比如fetch或axios调用 return await fetch(`https://your-api-endpoint`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); } // 将请求数据拆分成指定大小的批次 function splitIntoBatches(arr, batchSize) { const batches = []; for (let i = 0; i < arr.length; i += batchSize) { batches.push(arr.slice(i, i + batchSize)); } return batches; } // 分批处理请求的主函数 async function processRequestsInBatches(requestDataList, batchSize = 10) { const batches = splitIntoBatches(requestDataList, batchSize); for (const batch of batches) { // 等待当前批次所有请求完成后,再处理下一批 await Promise.all(batch.map(data => sendRequest(data))); console.log(`当前批次完成,已处理${batch.length}个请求`); } console.log('所有请求处理完成'); } // 使用示例:假设生成305个请求数据 const allRequestData = Array.from({length: 305}, (_, index) => ({id: index, content: `请求${index}`})); processRequestsInBatches(allRequestData);
关键说明
splitIntoBatches:自动适配任意请求数量,将数组拆分为每10个一组的子数组,不管总数量是2还是305都能正常工作。Promise.all():确保当前批次的所有请求都执行完成(成功或失败)后,才进入下一轮循环处理下一批。- 容错处理(可选):如果需要单个请求失败不影响整个批次,可在
sendRequest中添加错误捕获:
async function sendRequest(data) { try { return await fetch(`https://your-api-endpoint`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); } catch (error) { console.error(`请求${data.id}失败:`, error); // 可返回错误标记,方便后续统计失败请求 return { success: false, error, data }; } }
内容的提问来源于stack exchange,提问作者Cas
相关产品推荐
相关产品推荐

