javascript实现并发请求
要求
实现一个批量请求函数 multiRequest(urls, maxNum),要求最大并发数 maxNum,每当有一个请求返回,就留下一个空位,可以增加新的请求,所有请求完成后,结果按照 urls 里面的顺序依次打出
代码
const axios = function (url) {
return new Promise(resolve => {
setTimeout(() => {
resolve(url)
}, 1000)
})
}
/** 并发请求
* @param {Array} urls 请求数组
* @param {Number} maxNum 并发数
*/
function multiRequest(urls, maxNum) {
return new Promise(resolve => {
let count = 0
const results = []
while (count < maxNum && urls.length) {
next()
}
async function next() {
count++
const currentUrl = urls.shift();
console.log(`${currentUrl}开始了`)
const url = await axios(currentUrl)
console.log(`${url}结束了`)
count--
results.push(url)
if (urls.length) {
next()
} else if (!count){
resolve(results);
}
}
})
}
multiRequest(["/url1","/url2","/url3","/url4","/url5","/url6"], 3).then(res=>{
console.log(res, 'results');
})