@mrli-utils/asyncpool
Version:
异步请求并发控制函数,限制同一时间发起的请求量
2 lines (1 loc) • 540 B
JavaScript
;exports.asyncPool=async function(r,o,s,e=!1){const t=[],a=[];if("function"!=typeof s)throw Error("缺少真实请求函数");if(!Array.isArray(o))throw Error('asyncpool params "requestParams" should is array');for(const e of o){if(!Array.isArray(e))throw new TypeError("请求参数需要放到一个数组里面");const o=Promise.resolve().then((()=>s(...e)));if(t.push(o),t.length>=r){const s=o.then((()=>a.splice(a.indexOf(s),1)));a.push(s),r>a.length||await Promise.race(a)}}return e?Promise.allSettled(t):Promise.all(t)};