SOURCE

function d(taskList, maxCount = 2) {

    // 当前执行的任务数量
    let currentCount = 0

    // 执行的索引
    let currentIndex = 0

    // 已经完成的数量
    let resolveCount = 0;


    function run() {
        const task = taskList[currentIndex]
        currentIndex++
        task().then(res => {
            console.log(res, 'value')
            resolveCount++
            if (currentIndex < taskList.length) {
                run()
            }
            if (resolveCount === taskList.length) {
                console.log('全部执行完成')
            }
        })
    }

    for(let i = 0; i < taskList.length && currentCount < maxCount; i++) {
        currentCount++
        run()
    }

}


const task = [
    () => new Promise((resolve) => setTimeout(() => resolve(1), 1000)),
    () => new Promise((resolve) => setTimeout(() => resolve(2), 5000)),
    () => new Promise((resolve) => setTimeout(() => resolve(3), 1000)),
    () => new Promise((resolve) => setTimeout(() => resolve(4), 1000)),
    () => new Promise((resolve) => setTimeout(() => resolve(5), 1000)),
    () => new Promise((resolve) => setTimeout(() => resolve(6), 1000)),
    () => new Promise((resolve) => setTimeout(() => resolve(7), 1000)),
    () => new Promise((resolve) => setTimeout(() => resolve(8), 1000)),
]

d(task, 4)
console 命令行工具 X clear

                    
>
console