<script>
function concurRequest(urls, maxNum) {
return new Promise((resolve) => {
if (urls.length == 0) {
resolve([])
return
}
const results = []
let index = 0
let count = 0
async function request() {
if (index === urls.length) {
return
}
const i = index
const url = urls[index]
index++
try {
const resp = await fetch(url)
results[i] = resp
} catch (err) {
results[i] = err
} finally {
count++
if (count === urls.length) {
resolve(results)
}
request()
}
}
const times = Math.min(maxNum, urls.length)
for (let i = 0; i < times; i++) {
request()
}
})
}
concurRequest(urls, 20).then((reqs) => {
console.log(reqs);
})
</script>