可以重试的请求方法

可以重试的请求方法

方式1

  1. 定义名为 request 的异步函数,它接受两个参数:url 表示请求的 URL,maxCount 表示最大重试次数,默认为 5。

  2. 在函数体内,使用 fetch 方法发起异步请求,并使用 catch 方法捕获请求失败的情况。如果请求失败且重试次数小于等于 0,则使用 Promise.reject 方法返回一个被拒绝的 Promise,否则递归调用 request 方法,并将 maxCount 减 1。

  3. request 方法的调用端,使用 then 方法获取请求的 Promise 对象,并在 Promise 对象解析后,使用 await 关键字将响应对象转换为 JSON 数据。

  4. 最后,使用 catch 方法捕获请求失败的情况,并输出错误信息。

在网络不稳定的情况下保证请求的成功率。当请求成功时,它将返回一个 Promise,该 Promise 将解析为响应的 JSON 数据。当请求失败时,它将重试指定次数,每次重试之间没有延迟。如果重试次数用尽,它将抛出一个错误。

/***  发出请求,返回promise* @param {string} url 请求地址* @param {number} maxCount 最大重试次数*/
async function request(url, maxCount = 5) {return await fetch(url).catch((error) =>maxCount <= 0 ? Promise.reject(error) : request(url, maxCount - 1));
}request("http://129.211.31.58:8080/api/board/loadBoard", 6).then(async (pending) => {const result = await pending.json();console.log(result);}).catch((err) => {console.log("网络异常");});

方式2

async function retryableFetch(url, options = {}, retries = 3, delay = 1000) {try {const response = await fetch(url, options);if (!response.ok) {throw new Error(`Failed to fetch: ${response.status} ${response.statusText}`);}return response.json();} catch (error) {if (retries > 0) {await new Promise((resolve) => setTimeout(resolve, delay));return retryableFetch(url, options, retries - 1, delay);}throw error;}
}

上述代码定义了一个名为 retryableFetch 的函数,它接受四个参数:

  1. url:要请求的 URL。

  2. options:一个包含请求选项的对象,例如请求方法、请求头等。

  3. retries:一个整数,表示重试次数,默认为 3。

  4. delay:一个整数,表示重试之间的延迟时间(以毫秒为单位),默认为 1000。

当请求成功时,它将返回一个 Promise,该 Promise 将解析为响应的 JSON 数据。

当请求失败时,它将重试指定次数,每次重试之间延迟指定的时间。如果重试次数用尽,它将抛出一个错误。

以下是使用示例:

retryableFetch('https://jsonplaceholder.typicode.com/todos/1').then((data) => console.log(data)).catch((error) => console.error(error));

在上面的示例中,我们使用 retryableFetch 方法请求了一个 JSON 数据的 URL。如果请求失败,它将重试三次,并在每次重试之间等待一秒钟。如果重试次数用尽,它将抛出一个错误。如果请求成功,它将打印响应的 JSON 数据。

请注意,该方法只重试请求失败的情况。如果请求成功但返回的数据不符合预期,它将不会重试。如果需要重试这种情况,请根据需要自行修改代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某游戏公司Java面试八股文总结

1.值传递和引用传递区别&#xff1f;Java中为什么都是值传递&#xff1f; 值传递&#xff08;Pass by Value&#xff09;&#xff1a; 在值传递中&#xff0c;函数或方法的参数是原始数据的拷贝&#xff0c;而不是原始数据本身。当你将一个值传递给函数时&#xff0c;函数内部…

消失的人!消除视频中不需要的人物

视频拍摄中拍摄了不相干或者是不需要出现的人物&#xff0c;想要从视频中去除&#xff0c;应该如何操作呢&#xff1f;有什么快捷方法可以轻松扣除视频中的人物&#xff1f; 我们在视频剪辑的时候都有这样的烦恼吧&#xff1f;就是在一段视频素材里有多余的人物出现&#xff0…

uniapp 使用和引入 thorui

1. npm install thorui-uni 2. "easycom": { "autoscan": true, "custom": { "tui-(.*)": "thorui-uni/lib/thorui/tui-$1/tui-$1.vue" } }, 3.

身份证照片怎么弄成200k以内?三个方法轻松搞定!

在日常生活中&#xff0c;为了方便上传和保存、便于传输和处理以及符合相关规定等方面的考虑&#xff0c;身份证照片大小常常被要求控制在200k以内&#xff0c;可是手机随便一拍&#xff0c;任凭如何截图都在超过1M&#xff0c;这个时候就需要借助一些图片压缩工具&#xff0c;…

前端项目--尚医通学习分享

这段时间跟着线上课程完成了一个项目&#xff1a;商医通&#xff08;基于Vue3TypeScript的医院挂号平台&#xff09;。具体我就不过多地介绍其具体功能以及详细的实现步骤了&#xff0c;感兴趣的小伙伴直接&#xff1a;传送门 。该文章我就分享一下在该项目中学习到的一些知识点…

OJ项目【登录】——验证码、失败登录多次账户冻结、用户密码加密,我是如何实现的?

目录 前言 1、验证码 1.1、引入pom 1.2、前端核心代码 1.3、后端核心代码 2、账户冻结 2.1、思路&#xff1a; 2.2、核心代码示例&#xff1a; 3、密码加密——加盐算法 3.1、思路&#xff1a; 3.2、代码实现示例&#xff1a; 4、小结&#xff1a;展示我的项目 4…

在 Elasticsearch 中实现自动完成功能 2:n-gram

在第一部分中&#xff0c;我们讨论了使用前缀查询&#xff0c;这是一种自动完成的查询时间方法。 在这篇文章中&#xff0c;我们将讨论 n-gram - 一种索引时间方法&#xff0c;它在基本标记化后生成额外的分词&#xff0c;以便我们稍后在查询时能够获得更快的前缀匹配。 但在此…

MySQL InnoDB引擎深入学习的一天(InnoDB架构 + 事务底层原理 + MVCC)

目录 逻辑存储引擎 架构 概述 内存架构 Buffer Pool Change Buffe Adaptive Hash Index Log Buffer 磁盘结构 System Tablespace File-Per-Table Tablespaces General Tablespaces Undo Tablespaces Temporary Tablespaces Doublewrite Buffer Files Redo Log 后台线程 事务原…

30天工作量,推荐4个ai写作生成器工具,一键搞定!

全新升级&#xff01;畅销热门AI写作工具盘点40强&#xff0c;助你一键呈现顶尖文案&#xff01; AI写作工具&#xff0c;引领时代潮流&#xff0c;让办公生活更高效&#xff01;小编特意整理了市面上最好用的AI写作工具&#xff0c;共计40款&#xff01;你使用过哪些&#xff…

【JAVA-Day45】Java常用类StringBuffer解析

Java常用类StringBuffer解析 Java常用类StringBuffer解析一、什么是StringBuffer类二、StringBuffer类的方法2.1 append方法2.2 insert方法2.3 delete方法2.4 replace方法2.5 reverse方法2.6 toString方法2.7 capacity方法2.8 length方法 三、StringBuffer类的应用场景深入了解…

选择适合自身业务的HTTP代理有哪些因素决定?

相信对很多爬虫工作者和数据采集的企业来说&#xff0c;如何选购适合自己业务的HTTP代理是一个特别特别困扰的选题&#xff0c;市面上那么多HTTP代理厂商&#xff0c;好像这家有这些缺点&#xff0c;转头又看到另外一家的缺点&#xff0c;要找一家心仪的仿佛大海捞针。今天我们…

【音视频|ALSA】SS528开发板编译Linux内核ALSA驱动、移植alsa-lib、采集与播放usb耳机声音

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

二、深度测试(Z Test)

1.是什么 ①从渲染管线出发 ②书面上理解 所谓深度测试&#xff0c;就是针对当前对象在屏幕上&#xff08;更准确的说是frame buffer&#xff09;对应的像素点&#xff0c;讲对象自身的深度值与当前该像素点缓存的深度值进行比较&#xff0c;如果通过了&#xff0c;本对象再改…

使用 Github Actions 工作流自动部署 Github Pages

GitHub-Actions actions顾名思义就是一堆动作&#xff0c;是一个持续集成服务&#xff0c;持续集成包含了拉代码、运行测试、编译代码、登录远程服务器&#xff0c;发布到第三方服务等等的操作&#xff0c;GitHub将这些操作称为actions。 概念&#xff1a;Workflows, Events,…

7-2 友元类Cvector 武汉理工大学

7-2 友元类Cvector 分数 19 作者 谢颂华 单位 武汉理工大学 定义复数类CComplex和二维向量类CVector。 复数类具有实部real和虚部imag&#xff0c;定义构造函数。 二维向量有两个向量x和y&#xff0c;定义转换函数Change()和输出显示函数Print()。 在类CComplex中定义友元类CVe…

【Java学习之道】网络编程的基本概念

引言 这一章我们将一同进入网络编程的世界。在开始学习网络编程之前&#xff0c;我们需要先了解一些基本概念。那么&#xff0c;我们就从“什么是网络编程”这个问题开始吧。 一、网络编程的基本概念 1.1 什么是网络编程 网络编程&#xff0c;顾名思义&#xff0c;就是利用…

【算法-动态规划】完全背包问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

使用vue3+element-ui plus 快速构建后台管理模板

一、安装 vue3 脚手架 npm create vuelatestcd vue-ui-template #切换到刚刚创建好的vue项目根目录中 npm install #下载项目所需要的依赖包 npm run dev #启动运行项目服务项目启动后&#xff0c;默认页面显示如下&#xff1a; 二、安装element-ui plus 官网链接&#xff1a;…

js正则表达式

1.字符类 \w 匹配字母数字下划线&#xff0c;相当于[0-9A-Za-z_] \s 匹配单个空白字符&#xff0c;包括空格、制表符、回车符、换行符 \b 匹配一个词的边界 2.边界符 如果不加任何边界符&#xff0c;则表示包含。以下只要包含即可 // /123/ 匹配内容是否包含有123var rg …

QT中导出 Qt Tablewidget表格数据导出到 .csv文件

Qt Tablewidget表格数据的导出和导入 前期准备&#xff1a; pro文件加入 QT axcontainer 在头文件加入#include<ActiveQt/QAxObject> 网上还有写#include 版本不同&#xff0c;可能代码写法不同&#xff0c;自己测试。 一. xls/xlsx文件数据导入TableWidget表格 我…