SOURCE

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])
console 命令行工具 X clear

                    
>
console