一個數組里面10個異步任務都是promise,但是同時只能執(zhí)行三個蛆橡,設計一個函數最快執(zhí)行完
// 輸入參數為promise數組尔崔,最大限制并發(fā)數 limitMax=3
function promiseLimit(promiseArr,limitMax){
let pool=[]; //設置并發(fā)池
// 向并發(fā)池添加promise的方法
function add(){
let item=promiseArr.shift();
pool.push(item);
}
//***************************
function run(){
if(promiseArr.length===0) return;
let done=Promise.race(pool); //pool滿了后,直接race,獲取最快執(zhí)行完的promise
done.then(res=>{
pool.splice(pool.indexOf(done),1); //promise執(zhí)行完后霜幼,刪掉在pool中的位置。
add();
});
run();
}
while(pool.length<limitMax){ //當pool未滿時誉尖,往里加promise罪既。
add();
}
run();
}