实现一个批量请求函数, 能够限制并发量
function requestLimit(urls, max) {
const result = []
let count = 0
let index = 0
return new Promise(resolve => {
if (urls.length === 0) {
resolve([])
return
}
// 发送请求
const request = async () => {
if (index === urls.length) {
return
}
let url = urls[index]
let i = index
index++
try {
const res = await fetch(url)
result[i] = res
} catch (error) {
result[i] = error
} finally {
//判断是否所有请求都完成
count++
if (count === urls.length) {
resolve(result)
}
request()
}
}
for (let i = 0
request()
}
})
}
requestLimit(new Array(100).fill('https://api.uomg.com/api/rand.qinghua?format=json'), 3).then(value => {
console.log('value :>> ', value);
})