【JS】如何给fetch添加超时功能

news2024/12/23 11:09:37

前言

Ajax有两种方式实现请求,分别是xhrfetch,前者有超时功能,fetch则不然。下文尝试给fetch添加超时功能。

实现

使用终止器,在controller.abort()时便会在使用其signal信号的fetch函数发送一个终止信号,请求就会被取消。

const controller = new AbortController()
fetch("https://xxx.com/aa/bb", {
  signal: controller.signal,
})
setTimeout(() => {
  console.log(controller)
  controller.abort()
}, 10) // 这里10毫秒过于极端可能会导致不生效,具体根据使用场景设置

在这里插入图片描述
将超时时间设为较大值,则并不阻止请求。

封装

初步封装

const request = (timeout) => {
	const controller = new AbortController()
	fetch("https://xxx.com/aa/bb", {
	  signal: controller.signal,
	})
	setTimeout(() => {
	  controller.abort()
	}, timeout)
}

但是会提高难度,明明只是要给fetch加上超时功能,现在却变成封装请求,url、配置等都需要传递,duck不必,所以封装时一定要保证fetch的功能不变,即用的时候和直接使用fetch是一样的。

参考MockJS拦截Ajax请求的做法,它获取原先的xhr,并给xhr重新赋值。

const oldXHR = XMLHttpRequest
window.XMLHttpRequest = function(){
  // ...
  new oldXHR()
}

但是也不能这么搞,这么做有侵入性,会导致所有fetch都带有超时功能。

使用高阶函数则可以避免这种情况。

function createFetch(timeout) {
  return (resource, options) => {
    let controller = new AbortController()
    options = options || {}
    options.signal = controller.signal
    setTimeout(() => {
      controller.abort()
    }, timeout)
    return fetch(resource, options)
  }
}

使用没有超时功能的fetch

fetch("https://xxx.com/aa/bb")

在这里插入图片描述

使用高阶函数并传入超时时间:

createFetch(10)("https://xxx.com/aa/bb")

在这里插入图片描述

超时时间设置过长,则不会影响接口调用。

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

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

相关文章

PTA 求整数的位数及各位数字之和

对于给定的正整数N,求它的位数及其各位数字之和。 输入格式: 输入在一行中给出一个不超过109的正整数N。 输出格式: 在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。 输入样例: 321输出样例&#xff…

maven进阶(超详细)

多模块开发 1.抽取entity模块 将先前的SSMProject01项目中的entity文件夹抽取出来,成为一个独立的模块 在SSMProject01项目中引入maven_03_entity 首先找到maven_03_entity的pom文件 直接引入SSMProject01 尝试编译(compile)SSMProject01项…

前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第三篇:登录功能优化

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

Vue自己实现监视数据、Vue.set创建属性、Vue监视数据的原理

目录 1. 自己实现监视数据2. 使用Vue.set创建一个数据属性3. Vue监视数据的原理 1. 自己实现监视数据 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body&g…

【blender小技巧】如何拆分模型、合并和删除模型,删除多余骨骼

文章目录 前言进入面选择模式选取全部面拆分模型1、选中项——单独拆分2、按材质——按材质拆分3、按按松散块 合并模型删除模型某一块删除多余骨骼1、手动删除2、使用CATS插件的Fix Model 最终效果完结 前言 有时候&#xff0c;我们得到的模型是一个整体&#xff0c;想修改其…

VUE使用过程中的问题记录

现象1&#xff1a;npm run dev卡住不动 现象 问题原因&#xff1a; template 里面放一个元素我放了两个&#xff0c;改成一个好了

手机录音怎么降噪提取人声?四种高效提取人声的软件介绍!

手机录音怎么降噪提取人声&#xff1f;在日常生活中&#xff0c;手机录音成为了我们记录声音和音乐的重要工具。然而&#xff0c;录音时常会受到背景噪音的干扰&#xff0c;这不仅影响了音质&#xff0c;也使得人声的提取变得困难。为了帮助您更好地处理录音文件&#xff0c;我…

SAP Withholding Tax

SAP系统中的Withholding Tax&#xff08;预扣税&#xff09;配置是一个详细的过程&#xff0c;涉及到多个步骤和组件。以下是一些关键步骤和配置要点的概述&#xff1a; 定义业务地点&#xff1a;为公司所拥有的每个税务扣除账户号码&#xff08;TAN&#xff09;创建业务地点 。…

TPM管理培训:线上VS线下,哪种方式更胜一筹?

线上和线下的TPM管理培训各有优势&#xff0c;无法简单地评判哪种更胜一筹&#xff0c;而是要根据具体需求和实际情况来选择&#xff0c;深圳天行健TPM管理咨询公司解析如下&#xff1a; - 线上机构的优势 1.灵活性高&#xff1a;学员可以在任何有网络的地方进行学习&#xff…

SD卡数据恢复怎么做?一键恢复全攻略来了!

在数字时代&#xff0c;SD卡是我们用来存照片、视频和重要文件的小帮手。但有时候&#xff0c;如果不小心删了东西、误格式化了卡&#xff0c;或者设备出了点小问题&#xff0c;SD卡里的数据就可能找不到了。这时候&#xff0c;一款好用的SD卡数据恢复软件就能帮我们找回丢失的…

深入浅出消息队列----【如何保证消息不丢失?】

深入浅出消息队列----【如何保证消息不丢失&#xff1f;】 消息流转链路生成且发送消息流程存储流程消费流程 本文仅是文章笔记&#xff0c;整理了原文章中重要的知识点、记录了个人的看法 文章来源&#xff1a;编程导航-鱼皮【yes哥深入浅出消息队列专栏】 消息流转链路 消息从…

斯坦福大学研究人员,推荐的课题申报AI提示词分享

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 斯坦福大学心血管医学部研究人员创建了一个 GitHub 仓库&#xff0c;以汇集和整理使用AI帮助科研人员撰写更具竞争力的基金申请书。 以下是该Github仓库分享的好用的基金文本撰…

碰撞检测 | 基于ROS Rviz插件的多边形碰撞检测仿真平台

目录 0 专栏介绍1 基于多边形的碰撞检测2 碰撞检测仿真平台搭建2.1 多边形实例2.2 外部服务接口2.3 Rviz插件化 3 案例演示3.1 功能介绍3.2 绘制多边形 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战…

Ryzen 9000X3D还没来,先等来了R5 7600X3D

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; R5 7600X3D或于下月初推出&#xff0c;6核12线程102MB缓存 昨天我们刚刚聊过Ryzen 9000在欧洲部分地区开售即打折的“骚操作”&#xff0c;上周我们也曾分享过R9 9900X和R9 9950X首周在德不过50…

智慧水务平台主要帮助水司解决哪些问题,是如何解决的?

在快速发展的现代社会&#xff0c;水资源管理与服务面临着前所未有的挑战。传统水务管理模式已难以满足日益增长的需求与高标准的服务要求。正是基于此&#xff0c;我们隆重推出“智慧水务平台”&#xff0c;专为水司量身定制&#xff0c;一键式解决运营中的各类难题&#xff0…

easy click安卓版纯本地离线文字识别插件

目的 easy click是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。easy click也包含图色功能&#xff0c;识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要讲解下更优…

EasyExcel_通过模板导出(多sheet、列表、图片)

文章目录 前言一、EasyExcel是什么&#xff1f;二、模板样式调整三、使用步骤1.引入jar包2.方法示例2.1 Controller&#xff1a;2.2 Service&#xff1a;2.3 ServiceImpl:2.4 合并策略&#xff1a;2.5 对应DTO 总结 前言 产品今天提了个需求&#xff0c;大概是这样的&#xff…

中秋节月饼销售利用106短信群发平台业绩翻倍案例分析

在中秋节这一传统佳节&#xff0c;月饼作为节日的标志性食品&#xff0c;其销售市场竞争尤为激烈。为了在众多品牌中脱颖而出&#xff0c;不少月饼销售企业开始探索创新的营销方式。其中&#xff0c;利用106短信群发平台进行精准营销&#xff0c;成为众多企业实现业绩翻倍的有效…

C\C++ Sqlite3使用详解

C\C++ Sqlite3使用详解 一、源码下载二、sqlite3接口说明C++2.1 项目创建以及sqlite3使用2.1 连接数据库2.2 sqlite创建表2.2.1 示例代码2.2.2 注意事项2.3 sqlite插入数据2.3.1 示例代码2.3.2 注意事项2.4 sqlite数据删除2.5 sqlite数据查询一、源码下载 下载地址: https://…

思科设备静态路由实验

拓扑及需求 网络拓扑及 IP 编址如图所示&#xff1b;PC1 及 PC2 使用路由器模拟&#xff1b;在 R1、R2、R3 上配置静态路由&#xff0c;保证全网可达&#xff1b;在 R1、R3 上删掉上一步配置的静态路由&#xff0c;改用默认路由&#xff0c;仍然要求全网可达。 各设备具体配置…