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])