# 实现一个批量请求函数 multiRequest
实现要求:
- 要求最大并发数 maxNum
- 每当有一个请求返回,就留下一个空位,可以增加新的请求
- 所有请求完成后,结果按照 urls 里面的顺序依次打出
/**
*
* @param {*} urls 全部请求地址
* @param {*} maxNum 最大并发请求数
* @returns
*/
function multiRequest(urls, maxNum) {
const ret = [];
let i = 0;
let resolve;
const promise = new Promise(r => resolve = r);
const addTask = () => {
if (i >= urls.length) {
return resolve();
}
const task = request(urls[i++]).finally(() => {
addTask();
});
ret.push(task);
}
while (i < maxNum) {
addTask();
}
return promise.then(() => Promise.all(ret));
}
// 模拟请求
function request(url) {
return new Promise((r) => {
const time = Math.random() * 1000;
setTimeout(() => r(url), time);
});
}