如果一次性 就加载100个请求 肯定会造成服务器压力,所以有时候 需要
较少请求,来减轻服务器压力
代码如下
const urls = [];
for (let i = 0; i < 100; i++) {
urls.push("http://www.bai.com/" + i);
}
function handleRequest(max, urls) {
return new Promise((resolve) => {
if (urls.length === 0) {
resolve([]);
return;
}
const result = [];
let index = 0;
async function request() {
if (index >= urls.length) {
return;
}
const i = index;
const url = urls[index];
index++;
try {
const resp = await fetch(url);
result[i] = resp;
} catch (error) {
result[i] = error;
} finally {
// 这个是 相当于 当前的这个通道完成后在继续 调用下一个接口
request();
}
}
// 这个是 请求的并发数
const times = Math.min(max, urls.length);
for (let i = 0; i < times; i++) {
request();
}
resolve(result);
});
}
const aaa = handleRequest(5, urls);
console.log(aaa, "aaa");
结果