首页 > 其他分享 >创建一个带有重试机制的请求函数,用于避免请求受限或失败时重新尝试请求。

创建一个带有重试机制的请求函数,用于避免请求受限或失败时重新尝试请求。

时间:2023-10-12 11:58:02浏览次数:38  
标签:const 请求 interval number 重试 result 受限

/**
 * 创建一个带有重试机制的请求函数,用于避免请求受限或失败时重新尝试请求。
 * @param {function} func - 要执行的请求函数。
 * @param {number} maxCount - 最大重试次数,默认为 10。
 * @param {number} time - 重试间隔时间(毫秒),默认为 1500 毫秒。
 * @returns {object} 包含请求函数的对象。
 *
 * @example
 * import { retryRequest } from '@/utils/public';
 * // 使用 retryRequest 创建可重试的请求函数
 * const { request } = retryRequest(simulateFailedRequest, 5, 1000);
 * // 发起请求
 * const result = await request();
 */
export function retryRequest(func, reReq: { retry?: boolean; time?: number; maxCount?: number }) {
  let interval: any = null;
  let count: any = 1;
  const { time = 1500, maxCount = 10 } = reReq;
  const request = async (...args): Promise<any> => {
    return new Promise<void>((resolve, reject) => {
      clearInterval(interval);
      interval = setInterval(async () => {
        if (count < maxCount) {
          const result = await func(...args);
          if (result) {
            clearInterval(interval);
            resolve(result);
          } else {
            count++;
          }
        } else {
          clearInterval(interval);
          console.log('超过最大次数');
          reject();
        }
      }, time);
    });
  };

  return { request };
}

标签:const,请求,interval,number,重试,result,受限
From: https://www.cnblogs.com/zhengzhijian/p/17759162.html

相关文章

  • 前端请求代理配置
    前端请求代理配置,解决跨域问题,适用于React、Vue项目优点:可以配置多个代理,可以灵活控制请求是否走代理。缺点:配置繁琐,前端请求资源时必须带上前缀。第一步安装yarnaddhttp-proxy-middleware--save第二步新建文件在项目的src目录下新建文件setupProxy.js,脚手架会......
  • 关于 Spartacus CMS 请求响应是否应该被 Transfer State 机制 cover 的问题
    Spartacus默认设置是CMS请求会在CSR和SSR两种环境下都执行,动机是应对在页面渲染过程中,Back-Office有变化发生的情况。如果确实只希望CMS只在SSR端执行,将routing.loadStrategy改成ONCE即可。这个Stackoverflow帖子做了详细说明。打开上面的cms-store.module......
  • HTTP请求
    实体标签ETag(实体标签)是HTTP响应头的一部分,用于标识响应内容的版本。它通常是服务器根据资源的内容生成的唯一标识符。ETag的生成方法可以根据资源的不同而变化,但通常有以下几种方式:生成方法描述哈希算法服务器使用哈希算法(如MD5、SHA-1、SHA-256等)计算资源内容的哈希......
  • spring-mvc 请求流程学习
    参考:01、基础入门-SpringBoot2课程介绍_哔哩哔哩_bilibili请求进入HttpServlet的doGet方法然后通过实现类org.springframework.web.servlet.FrameworkServlet#doGet()调用org.springframework.web.servlet.FrameworkServlet#processRequest----》org.springframework.web.ser......
  • springMVC @Test方法中如何请求https
    原文链接:https://www.longkui.site/error/springmvc-test-https/4823/0.背景springMVC环境,需要在@Test方法中发送一个https请求,按照格式要求发送了,结果报错org.springframework.web.client.ResourceAccessException:I/OerroronPOSTrequestfor"https://xxxx/xxx/xx:jav......
  • 关于vant移动端的样式使用hbuilderX打包成app时数据请求失败的问题
    项目使用的是vant4,在使用hbuilderX打包时,发现请求后端失败,然后在网上查了一下说是因为在apk中不存在跨域的问题,所以不需要进行代理设置那就取消代理试试吧(注:我这里使用的是cli3):api.js中写入exportconstlogin=(data)=>{//登录  returnaxiosPost('http://xxx.xxx.......
  • java RestTemplate集成HttpClient池化及异常重试
    解决存在网络隔离,首次连接请求被拒绝情况SocketException首次请求超时情况SocketTimeoutException无返回数据清空NoHttpResponseException进行重试importorg.apache.http.HttpEntityEnclosingRequest;importorg.apache.http.NoHttpResponseException;importorg.apache.htt......
  • 1_请求方式
    获取传递的参数import{Controller,Get,Post,Request,Body}from'@nestjs/common';import{UserService}from'./user.service';@Controller('user')exportclassUserController{constructor(privatereadonlyuserService:UserS......
  • 建议后端接口都使用post请求?是这样吗?
    上篇文章讲到了get、post、put、delete等请求,为何有些公司建议后端接口都使用post请求呢?首先谈谈个人的拙见,我认为并非都使用post请求就是好的。对于一些简单的查询请求用get也比较合适。为啥用post,有可能我们业务逻辑一开始比较简单,后续添加了很多复杂逻辑,可能查询条件添加了很......
  • java RestTemplate 发送post请求
    case1:POST,格式:application/json/***采用POST请求,数据格式为application/json,并且返回结果是JSONstring*@paramurl*@param*@return*/publicstaticStringpostForJson(Stringurl,JSONObjectjson){RestTemplaterestTemplate=newRestTemplate(......