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)