同时允许最大任务量

function limitRequest(tasks,n,cb){
    let i = 0;
    let start = 0;
    let arr = []
    return new Promise((res,rej) => {
        let run = function(){
            if(arr.length == tasks.length){
                cb()
                res(arr)
            }
            while(i < tasks.length && start < n ){
                let cur = i
                start++
                tasks[cur]().then(res => {
                    arr[cur] = res
                }).catch(err => {
                    arr[cur] = err
                }).finally(() => {
                    i++
                    start--
                    run()
                    // 输出start最大值不能大于n
                    console.log('start',start)
                })
            }
        }
        run()
    })
}

function t1(){
    return new Promise((res)=>{
        setTimeout(()=>{
            res('111')
        },1000)
    })
}
function t2(){
    return new Promise((res)=>{
        setTimeout(()=>{
            res('222')
        },2000)
    })
}
function t3(){
    return new Promise((res)=>{
        setTimeout(()=>{
            res('333')
        },3000)
    })
}
function t4(){
    return new Promise((res)=>{
        setTimeout(()=>{
            res('444')
        },4000)
    })
}
function t5(){
    return new Promise((res)=>{
        setTimeout(()=>{
            res('555')
        },5000)
    })
}

function log(){
    console.log('执行完毕')
}
 
limitRequest([t1,t2,t3,t4,t5],3,log).then(res => console.log(res))
posted @ 2020-08-02 23:27  671_MrSix  阅读(98)  评论(0编辑  收藏  举报