promise数组限定并发数

一个数组里面10个异步任务都是promise,但是同时只能执行三个,设计一个函数最快执行完

// 输入参数为promise数组,最大限制并发数 limitMax=3
function promiseLimit(promiseArr,limitMax){
  let pool=[];   //设置并发池
    // 向并发池添加promise的方法
  function add(){
           let item=promiseArr.shift();
           pool.push(item);
      }
//***************************
   function run(){
           if(promiseArr.length===0) return;
           let done=Promise.race(pool);   //pool满了后,直接race,获取最快执行完的promise
           done.then(res=>{
              pool.splice(pool.indexOf(done),1);      //promise执行完后,删掉在pool中的位置。
              add();
           });
            run();
   }
   while(pool.length<limitMax){       //当pool未满时,往里加promise。
         add();
  }
  run();
}


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容