并发请求
小于 1 分钟
并发请求
async function concurRequest(urlList,max) {
return new Promise( (reslove) => {
if (urlList.length === 0) return reslove([])
const results = [] // 结果集
let index = 0 // 保存当前已请求数
let count =0 // 请求完成数量
const requst = async () => {
if(index===urlList.length) return
const url = urlList[index]
const i = index
index++
try {
const resp = await fetch(url)
results[i] = resp
} catch (error) {
results[i] = error
} finally {
count++
// 判断是否全部完成
if (count === urlList.length) {
reslove(results)
return
}
// 请求完直接下一个
requst()
}
}
// 并发请求
for (const iterator of [...new Array(Math.min(max,urlList.length))]) {
requst()
}
})
}
concurRequest([1,2,3,4,5,6],4)