首页 > 其他分享 >批量请求

批量请求

时间:2023-07-11 17:23:44浏览次数:21  
标签:count 请求 批量 max results callback urls

请实现如下的函数,可以批量请求数据,所有的URL地址在urls参数中,同时可以通过max参数控制请求的并发度,当所有请求结束之后,需要执行callback回调函数,发请求的函数可以直接使用fetch即可。function sendRequest(urls:string[],max: number, callback: ()=> void){}

function sendRequest(urls, max, callback) {
  let count = urls.length; // 记录还未完成请求的数量
  let index = 0; // 记录当前请求的索引
  let results = []; // 记录所有请求的结果

  function handleRequest() {
    if (index >= urls.length) {
      // 所有请求都已完成
      callback(results);
      return;
    }

    const url = urls[index];
    index++;

    fetch(url)
      .then(response => response.json())
      .then(data => {
        results.push(data);
        count--;

        if (count === 0) {
          // 当前并发请求数量已达到最大值,等待其中一个请求完成后再继续发起新的请求
          handleRequest();
        }
      })
      .catch(error => {
        console.error(`请求 ${url} 失败:${error}`);
        count--;

        if (count === 0) {
          // 当前并发请求数量已达到最大值,等待其中一个请求完成后再继续发起新的请求
          handleRequest();
        }
      });
  }

  // 先发起 max 个请求
  for (let i = 0; i < max; i++) {
    handleRequest();
  }
}

注:

这个函数接收三个参数:

  • urls:一个包含所有请求地址的字符串数组。
  • max:最大并发请求数量。
  • callback:所有请求完成后的回调函数,它接收一个参数 results,是一个包含所有请求结果的数组。

函数的实现思路是:

  • 先定义三个变量:count 记录还未完成请求的数量,index 记录当前请求的索引,results 记录所有请求的结果。
  • 定义一个 handleRequest 函数,用于发起单个请求。如果当前并发请求数量已达到最大值,就等待其中一个请求完成后再继续发起新的请求。
  • 先发起 max 个请求,然后等待它们完成。每当一个请求完成时,就将其结果存入 results 数组中,并将 count 减一。如果此时还有未完成的请求,就继续发起新的请求。
  • 当所有请求都已完成时,调用回调函数 callback,并将 results 数组作为参数传入。

标签:count,请求,批量,max,results,callback,urls
From: https://www.cnblogs.com/Hailey-hwx/p/17545357.html

相关文章

  • ZeroMQ: Java 请求/响应和发布/订阅模式的简单实现
    转载于:https://blog.csdn.net/weixin_47951400/article/details/119142454 文章目录POM一、请求响应模式(ZMQ_REQ+ZMQ_REP)1.REP2.REQ3.测试REPREQ测试结果二、发布/订阅模式(ZMQ_PUB+ZMQ_SUB)1.PUB2.SUB3.测试PUBSUB测试结果 POM ......
  • java Fegin x-www-form-urlencoded 类型请求
    spring发送content-type=application/x-www-form-urlencoded和普通请求不太一样。@FeignClient(name="ocr-api",url="${orc.idcard-url}",fallbackFactory=OcrClientFallbackFactory.class)publicinterfaceOcrClient{@PostMappi......
  • NSURL请求中含有中文的解决方法
    原文地址:https://blog.csdn.net/zhanglei5415/article/details/131434931一、问题当对含有中文的url字符串,进行NSURL对象包装时,是不能被识别的。不会得到期望的NSURL对象,而是返回一个nil值;NSString*urlString=@"http://www.aa.com/download/文件.docx";NSURL*url=[N......
  • Python核对批量下载多个文件时的下载情况
      本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法。  批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见。然而,对于动辄成千上万景的遥感影像文件,下载过程中可能会出现各类失败问题,且或许在下载软件或工具......
  • 获取请求的ip地址
    直接上代码publicclassIpUtil{/***获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,**可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的......
  • 聊聊Zookeeper技术内幕之客户端与SetData请求处理
    从客户端会话创建到网络连接、请求处理,简单的叙述下流程与逻辑客户端客户端是开发人员使用ZooKeeper最主要的途径,ZooKeeper的客户端主要由以下几个核心组件组成。ZooKeeper实例:客户端的入口。ClientWatchManager:客户端Watcher管理器。HostProvider:客户端地址列表管理器(管理......
  • ChatGPT炒股:批量下载北交所上市公司的招股说明书
    打开北京证券交易所官网,点击发行上市,然后点击公开发行信息披露,然后在查询框里面输入关键词:在北京证券交易所上市招股说明书,然后选择时间,点击查询,就可以看到所有北交所上市公司的招股说明书了,一共4页查看网页源代码,在network里面,可以看到动态网页的真实地址,然后点击payload,矿业看到......
  • ChatGPT炒股:批量下载北交所上市公司的招股说明书
    打开北京证券交易所官网,点击发行上市,然后点击公开发行信息披露,然后在查询框里面输入关键词:在北京证券交易所上市招股说明书,然后选择时间,点击查询,就可以看到所有北交所上市公司的招股说明书了,一共4页查看网页源代码,在network里面,可以看到动态网页的真实地址,然后点击payload,矿业看到......
  • 关于请求方式
    @RestController@RequestMapping("/api")publicclassMyController{@PostMapping("/endpoint")publicResponseEntity<String>handleRequest(@RequestBodyMyParameterparameter){//处理参数逻辑Stringname=param......
  • JS中使用Promise.all控制所有的异步请求都完成后,在执行后续逻辑
    使用场景为,在js中连续的几个异步耗时操作,后面的耗时操作需要使用第一个操作的返回结果。例如调用ajax异步接口,需要先创建完主表,然后拿到主表id在去循环创建明细表,等全部创建完成后,弹出提示来,或者失败提示。通常情况,在耗时操作完成后在去调用,需要将异步方法转成同步方法,结合回调函......