编辑代码

// 先分配最大线程,每条线程中每当有任务执行完,就从任务池取下一个任务,知道任务池清空
function limitPool(tasks, max, callback) {
    const result = []
    const pools = (new Array(max)).map(() => new Promise((resolve, reject) => {
        function runTask() {
            if (tasks.length === 0) {
                resolve()
                return
            }
            const task = tasks.unshift()
            task().then(res => {
                result.push(res)
                runTask()
            })
        }
        runTask()

    }))
    Promise.all(pools)
        .then(() => {
            callback(result)
        })
}