编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 


function createRequest(tasks=[], count=5) {
    let result = []
    let runing = 0
    let len = tasks.length
    return new Promise((resolve, reject) => {
        next()
        function next() {
            while(runing < count && tasks.length) {
                let task = tasks.pop()
                runing++
                task.then(res => {
                    result.push(res)
                }).finally(() => {
                    runing--
                    next()
                })
            }
                console.log(result)
        
            if(result.length === len) {
                resolve(result)
            }
        }
    })
}

function getRequest(time) {
    return new Promise(resolve => {
        setTimeout(() => resolve(time), time)
    })
}

const tasks = [getRequest(4000), getRequest(2000),getRequest(2000),getRequest(2000)]

console.time()
createRequest(tasks, 2).then(res => {
    console.log(res, 111)
    console.timeEnd()
})