前端面试题 – 108. 实现一个带有限流功能的批量请求函数(BatchRequest)

接收一组异步请求任务和最大并发数,确保同时最多只有指定数量的请求在执行。

关键点:返回一个Promise。然后通过makeRequest计数执行,超出上限并且都执行了就resolve。否则取出任务数组对应的任务执行,记录状态。finally的时候递归。

function batchRequest(requests, maxConcurrency) {
  return new Promise((resolve, reject) => {
    const results = [];
    let completedCount = 0;
    let currentIndex = 0;

    function makeRequest(index) {
      if (index >= requests.length) {
        if (completedCount === requests.length) {
          resolve(results);
        }
        return;
      }

      const currentRequest = requests[index];
      currentRequest()
        .then((result) => {
          results[index] = result;
        })
        .catch((error) => {
          results[index] = error;
        })
        .finally(() => {
          completedCount++;
          makeRequest(currentIndex++);
        });

      if (currentIndex - index < maxConcurrency) {
        makeRequest(currentIndex++);
      }
    }

    makeRequest(0);
  });
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYs2UE0y' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片