批量请求
请实现如下的函数,可以批量请求数据,所有的URL地址在urls参数中,同时可以通过max参数控制请求的并发度,当所有请求结束之后,需要执行callback回调函数,发请求的函数可以直接使用fetch即可。function sendRequest(urls:string[],max: number, callback: ()=> void){}
function sendRequest(urls, max, callback) {
let count = urls.length; // 记录还未完成请求的数量
let index = 0; // 记录当前请求的索引
let results = []; // 记录所有请求的结果
function handleRequest() {
if (index >= urls.length) {
// 所有请求都已完成
callback(results);
return;
}
const url = urls[index];
index++;
fetch(url)
.then(response => response.json())
.then(data => {
results.push(data);
count--;
if (count === 0) {
// 当前并发请求数量已达到最大值,等待其中一个请求完成后再继续发起新的请求
handleRequest();
}
})
.catch(error => {
console.error(`请求 ${url} 失败:${error}`);
count--;
if (count === 0) {
// 当前并发请求数量已达到最大值,等待其中一个请求完成后再继续发起新的请求
handleRequest();
}
});
}
// 先发起 max 个请求
for (let i = 0; i < max; i++) {
handleRequest();
}
}
注:
这个函数接收三个参数:
urls:一个包含所有请求地址的字符串数组。max:最大并发请求数量。callback:所有请求完成后的回调函数,它接收一个参数results,是一个包含所有请求结果的数组。
函数的实现思路是:
- 先定义三个变量:
count记录还未完成请求的数量,index记录当前请求的索引,results记录所有请求的结果。 - 定义一个
handleRequest函数,用于发起单个请求。如果当前并发请求数量已达到最大值,就等待其中一个请求完成后再继续发起新的请求。 - 先发起
max个请求,然后等待它们完成。每当一个请求完成时,就将其结果存入results数组中,并将count减一。如果此时还有未完成的请求,就继续发起新的请求。 - 当所有请求都已完成时,调用回调函数
callback,并将results数组作为参数传入。

浙公网安备 33010602011771号