export function requestLimit (urls: string[], limit: number) {
return new Promise<any[]>((resolve) => {
if (urls.length === 0) {
resolve([])
return
}
const results: any[] = []
let index = 0
let indx = 0
let count = 0
async function request () {
const url = urls[index]
indx = index
index++
try {
const resp = await fetch(url)
results[indx] = resp
}
catch (err) {
results[indx] = err
}
finally {
count++
if (count === urls.length)
resolve(results)
request()
}
}
const times = Math.min(urls.length, limit)
for (let i = 0; i < times; i++) {
request()
}
})
}