关于javascript:限制请求数量函数

10次阅读

共计 607 个字符,预计需要花费 2 分钟才能阅读完成。

/**
 * 实现一个管制 promise 并发个数限度在特定个数的函数 (限度应用 async 和 await 实现):* 例:如须要发送 20 个 fetch 申请,然而同时限度发送个数在 5 个以内,如果 5 个申请发送进来了还剩 15 个申请没有发送,前 5 个申请任何一个申请胜利就要将残余 15 个中一个增加到 4 个正在申请的 pool 外面,最终并发申请为 5。* @Param poolLimit 申请个数限度
 * @Param argsArray 申请参数
 * @Param iteratorFn 申请函数
 * @Return promise 执行后果
 */
async function asyncPool(poolLimit, argsArray, iteratorFn) {const res = [];
  const excutings = [];
  for (const args of argsArray) {let p = Promise.resolve().then(() => iteratorFn(args));
    res.push(p);
    if (poolLimit < argsArray.length) {const e = p.then(() => excutings.splice(excutings.indexOf(e), 1));
      excutings.push(e);
      if (excutings.length >= poolLimit) {await Promise.race(res);
      }
    }
  }
  return Promise.all(res);
}
正文完
 0