let request = (url) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(url)
}, 1000)
})
}
async function limit(max, urls) {
const pools = []
for(let i=0; i<urls.length; i++) {
const p = request(urls[i])
p.then(res => {
console.log(`${res} 结束,当前并发数:${pools.length}`);
pools.splice(pools.indexOf(p), 1)
})
pools.push(p)
if(pools.length === max) {
await Promise.race(pools)
}
}
}
limit(3, [1,2,3,4,5])