要求如下:
要求最大并发数 maxNum
每当有一个请求返回,就留下一个空位,可以增加新的请求所有请求完成后,
结果按照 urls 里面的顺序依次打
urls
maxNum
function multiRequest(urls, maxNum) {
const ret = [];
let i = 0;
let resolve;
const promise = new Promise(r => resolve = r);
const addTask = () => {
if (i >= arr.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);
});
}