接收一组异步请求任务和最大并发数,确保同时最多只有指定数量的请求在执行。
关键点:返回一个Promise。然后通过makeRequest计数执行,超出上限并且都执行了就resolve。否则取出任务数组对应的任务执行,记录状态。finally的时候递归。
function batchRequest(requests, maxConcurrency) {
return new Promise((resolve, reject) => {
const results = [];
let completedCount = 0;
let currentIndex = 0;
function makeRequest(index) {
if (index >= requests.length) {
if (completedCount === requests.length) {
resolve(results);
}
return;
}
const currentRequest = requests[index];
currentRequest()
.then((result) => {
results[index] = result;
})
.catch((error) => {
results[index] = error;
})
.finally(() => {
completedCount++;
makeRequest(currentIndex++);
});
if (currentIndex - index < maxConcurrency) {
makeRequest(currentIndex++);
}
}
makeRequest(0);
});
}
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END