async function batchRequest(urls, limit) {
const results = [];
const executing = [];
for (const url of urls) {
const request = fetch(url);
executing.push(request);
if (executing.length >= limit) {
await Promise.race(executing);
executing.splice(executing.indexOf(request), 1);
}
}
await Promise.all(executing);
for (const request of executing) {
const response = await request; const data = await response.json();
results.push(data);
}
return results;
}
使用示例
const urls = [
'https://api.example.com/data1',
'https://api.example.com/data2',
'https://api.example.com/data3',
'https://api.example.com/data4',
'https://api.example.com/data5'
];
const limit = 2;
batchRequest(urls, limit)
.then(results => {
console.log(results);
})
.catch(error => {
console.error(error);
});