SOURCE

console 命令行工具 X clear

                    
>
console
function delay(ms){
    return new Promise(resolve=>{
        setTimeout(resolve,ms)
    })
}

function rand(max=5000){
    return Math.ceil(Math.random() * 1000000) % max
}
function createPromises(length=100){
    return Array.from({length}).fill("").map((_,i)=>{
        return ()=>delay(rand(2500)).then(()=>i).then((v)=>{
            console.log("promise %d",v)
        })
    })
}

function concurrentPromise(promises,concurrentNum=2){
    if(!Array.isArray(promises)) return
    let index = concurrentNum-1
    async function next(){
        index++
        const promise = promises[index]
        if(!promise) return
        await promise()
        await next()
    }
    for(let i=0;i<concurrentNum;i++){
        let promise = promises[i]
        if(!promise) continue
        promise().then(next)
    }
}

concurrentPromise(createPromises(),1)
// const promises = createPromises()

// console.info(promises)