SOURCE

function pLimit(concurrency){
    const queue = [];
    let activeCount = 0;

    const next = ()=>{
        if(queue.length>0 && activeCount<concurrency){
            activeCount++
            const  [task,resolve,reject] = queue.shift();
            task().then(resolve).catch(reject).finally(()=>{
                activeCount--;
                next();
            })
        }
    }
    return (fn)=>{
        return new Promise((resolve,reject)=>{
            queue.push([fn.resolve,reject]);
            next()
        })
    }
}
console 命令行工具 X clear

                    
>
console