// 模拟ajax请求
function majax(url) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const res = {
req: url,
res: `回应:${url}`
}
resolve(res);
}, 2000);
})
}
// 批量请求切控制并发数
function multiRequest(urls, maxNum) {
return new Promise((resolve, reject) => {
let _urls = [...urls]
let stackNum = 0;
let _rsl = [];
// 添加一个新的请求
let addXhr = function () {
// 队列已满或没有待请求
if (stackNum >= maxNum || _urls.length == 0) return;
const __path = _urls.shift();
stackNum++;
console.log(`begin!`)
majax(__path).then(res => {
_rsl.push(res)
console.log(`over!`)
stackNum--;
if (stackNum == 0 && _urls.length == 0) {
// 所有请求全部返回完毕
resolve(_rsl);
} else {
addXhr();
}
})
}
while (stackNum < maxNum) {
addXhr();
}
})
}
const urls = [
'https://wwww.baidu.com1',
'https://wwww.baidu.com2',
'https://wwww.baidu.com3',
'https://wwww.baidu.com4',
'https://wwww.baidu.com5',
]
multiRequest(urls, 1).then(res => {
console.log(res, 'res------')
})
console