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