同时允许最大任务量
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))
以自己现在的努力程度,还没有资格和别人拼天赋

浙公网安备 33010602011771号