// 实现一个批量请求函数 multiRequest(urls, maxNum)
// 要求:
// 要求最大并发数 maxNum
// 每当有一个请求返回,就留下一个空位,可以增加新的请求
// 所有请求完成后,结果按照 urls 里面的顺序依次打出
let a = "https://dog.ceo/api/breeds/image/random";
let b = "https://dog.ceo/api/breeds/image/random";
let c = "https://dog.ceo/api/breeds/image/random";
let d = "https://dog.ceo/api/breeds/image/random";
let e = "https://dog.ceo/api/breeds/list";
let f = "https://dog.ceo/api/breeds/image/random";
let g = "https://dog.ceo/api/breeds/image/random";
let h = "https://dog.ceo/api/breeds/image/random";
let i = "https://dog.ceo/api/breeds/image/random";
let q = "https://dog.ceo/api/breeds/list";
let urls = [a, b, c, d, e, f, g, h, i, q];
const multiRequest = (urls, maxNum) => {
return new Promise((resolve, reject) => {
// 记录当前请求数,全部完成后返还
let count = 0;
// 记录请求队列长度
let lens = urls.length;
// 内部执行队列
let dqueue = [];
let i = 0;
while (i < maxNum) {
dqueue.push(urls[i]);
i++;
}
// 内部队列,保存结果
let queue = [];
let index = 0;
while (index < dqueue.length) {
fetch(dqueue[index])
.then((res) => {
queue.push(res);
count++;
})
.then((res) => {
if (dqueue.length < lens) {
dqueue.push(urls[count + maxNum - 1]);
fetch(dqueue[count + maxNum - 1])
.then((res) => {
queue.push(res);
count++;
})
.then((res) => {
if (count === lens) {
resolve(queue);
}
});
}
if (count === lens) {
resolve(queue);
}
});
index++;
}
});
};
multiRequest(urls, 5).then((res) => {
console.log(res);
});