限制请求数量函数

Posted PatWu16

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制请求数量函数相关的知识,希望对你有一定的参考价值。

/**
 * 实现一个控制 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);
}

以上是关于限制请求数量函数的主要内容,如果未能解决你的问题,请参考以下文章

限制并发请求的数量 aiohttp

如何限制并发的 异步IO 请求数量?

使用信号量限制并发 AsyncIO 任务的数量不起作用

如何限制请求数量?姜戈

sql将字符串拆分为始终相同数量的片段

.NET 7 新增速率限制 (Rate Limiting) 功能,轻松限制请求数量