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

news/2024/9/19 4:57:03/ 标签: javascript, okhttp, android

前言

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

实现

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

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

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

封装

初步封装

javascript">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重新赋值。

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

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

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

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

使用没有超时功能的fetch

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

在这里插入图片描述

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

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

在这里插入图片描述

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


http://www.ppmy.cn/news/1520879.html

相关文章

数学建模强化宝典(11)时间预测模型

前言 时间预测模型,即时间序列预测模型,是一类专门用于分析和预测时间序列数据的模型。时间序列数据是指将某一变量在不同时间点的观测值按时间先后顺序排列而成的序列。这类模型在金融、经济、气象、工业控制等多个领域都有广泛的应用。以下是一些常见的…

网络优化:提升MySQL数据恢复效率的策略

在当今的信息技术环境中,数据恢复是确保企业数据安全和业务连续性的关键环节。特别是在网络密集型的环境中,数据恢复的网络优化对于提升恢复速度和效率至关重要。本文将深入探讨如何在MySQL中实现数据恢复的网络优化,包括网络基础设施的优化、…

Unity 贴图拷贝与性能对比

Cooooopy 🌳GetPixels🌳GetRawTextureData🌳RenderTexture🌳Graphics.CopyTexture🌭性能对比 🌳GetPixels var pixels tex.GetPixels();tex2.SetPixels(pixels);tex2.Apply();🌳GetRawTextureD…

C#中的控件和组件

在 C# 中,特别是在 Windows Forms 应用程序中,控件(Controls)和组件(Components)是构建用户界面和提供功能的基础元素。它们都是 System.Windows.Forms 命名空间下的对象,但它们之间存在一些区别…

录屏软件哪个好用免费无水印?微课录课软件推荐 屏幕录制工具app下载

随着在线教学、远程办公和自媒体创作的兴起,电脑录屏软件逐渐成为了许多用户的必备工具。市面上的录屏软件琳琅满目,但真正既好用又免费的却并不多见。今天为大家推荐几款好用的录屏软件,而且这些软件大多都是免费下载使用。赶快看看有没有你…

S-Clustr(影子集群) Simple SCC伪代码编译器,工业控制DSL结构语言,递归函数调用

项目地址:https://github.com/MartinxMax/S-Clustr/releases 200 S-Clustr Simple DSL 语法 内置函数示例RUN(启动设备)RUN:<ID>STOP(停止设备)STOP:<ID>TIME(MS延时)TIME:<Delay/Ms> 函数示例DEF(定义函数名,空形参)DEF Function:DEF(函数名,带形参)DEF …

《Zookeeper 的监听机制及原理解析》

一、引言 在分布式系统中&#xff0c;协调和管理各个节点的状态是一项至关重要的任务。ZooKeeper 作为一个开源的分布式协调服务&#xff0c;被广泛应用于众多分布式系统中&#xff0c;如 Hadoop、HBase、Kafka 等。其中&#xff0c;ZooKeeper 的监听机制是其实现分布式协调的关…

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

828华为云征文&#xff5c;华为云Flexus X实例docker部署srs6并调优&#xff0c;协议使用webrtc与rtmp 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务…

4.Copy Constructor的构造操作

目录 1、对象赋值问题引入 2、Bitwise Copy Semantics&#xff08;位逐次拷贝&#xff09; 3、处理class virtual function 4、处理virtual base class subobject 1、对象赋值问题引入 在C中&#xff0c;有三种情况会以一个object的内容作为另一个class object的初值。这三…

ubuntu任何版本 卡死 解决办法

首先&#xff0c;我们一定要记得ubuntu一定不要强制关机&#xff0c;一定&#xff0c;一定 因为90% 的可能你的电脑从此就会黑屏开不了机了&#xff0c;然后你就可以按照我的方法去卸载&#xff0c;重装ubuntu系统了。/(ㄒoㄒ)/~~ &#xff08;如果能解决您的问题&#xff0c…

go语言的闭包

闭包其实是匿名函数&#xff0c;不过与一般匿名函数不同&#xff0c;它要引用外部变量。 package main import "fmt"func getSum() func(int)(int){var sum int 0return func(x int) int{sum xreturn sum} } func main(){f : getSum()fmt.Println(f(1))fmt.Printl…

谷粒商城实战笔记-285~290-分布式事务

文章目录 一&#xff0c;285、商城业务-分布式事务-分布式CAP&Raft原理1&#xff0c;CAP简介2&#xff0c;三种常见的组合2.1 CA 模型 - 一致性 可用性2.2 CP 模型 - 一致性 分区容忍性2.3 AP 模型 - 可用性 分区容忍性 3&#xff0c;CAP最小必要知识4&#xff0c;Raft算…

Qt中的各种“q+基本数据类型“

前言 虽说Qt支持C的数据类型&#xff0c;但是还是用Qt自己又封装的数据类型比较好。你在支持能有我原生的支持&#xff1f; 正文 先看qint系列 有qint8,quint8,qint16,quint16,qint32,quint32,qint64,quint64 源码如下 解读 1. typedef signed char qint8; 说明: 定义…

【GPT】Coze使用开放平台接口-【6】Dify 也来一遍

前面讲了 coze 的相关用法&#xff0c;这边想着用 Dify 也来一遍&#xff0c;刚开始的时候接触的是 Dify&#xff0c;后面才是 coze。Dify 和 coze 的侧重点不同&#xff0c;我个人是更倾向用 Dify 构建工作流就可以了&#xff0c;coze 还是相对全能。 本节用 Dify 也会创建插…

MATLAB 计算凹凸多边形的面积(85)

MATLAB 计算凹凸多边形的面积(84) 一、算法介绍二、算法实现1.代码一、算法介绍 计算凹凸多边形的面积,并输出计算结果,可视化 二、算法实现 1.代码 % 设置多边形的顶点坐标 % 这里以一个五边形为例 x = [1, 3, 4

java宠物商城网站系统的设计与实现

springboot508基于Springboot宠物商城网站系统 题目&#xff1a;宠物商城网站系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往…

【无标题】一起学习LeetCode热题100道(67/100)

67.寻找旋转排序数组中的最小值(学习) 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 …

【Linux修行路】进程通信——消息队列、信号量

目录 ⛳️推荐 一、消息队列 1.1 实现原理 1.2 消息队列接口 1.2.1 msgget——创建、获取一个消息队列 1.2.2 msgctl——释放消息队列、获取消息队列属性 1.2.3 msgsnd——发送数据 1.2.4 msgrcv——从消息队列中检索数据块 1.3 消息队列的指令操作 二、信号量 2.1 …

我写了个ffmpeg-spring-boot-starter 使得Java能剪辑视频!!

最近工作中在使用FFmpeg&#xff0c;加上之前写过较多的SpringBoot的Starter&#xff0c;所以干脆再写一个FFmpeg的Starter出来给大家使用。 首先我们来了解一下FFmpeg能干什么&#xff0c;FFmpeg 是一个强大的命令行工具和库集合&#xff0c;用于处理多媒体数据。它可以用来做…

【拉取Git项目到本地,知识小记,后续再改】

前提&#xff1a;Git已经安装好 https://blog.csdn.net/mukes/article/details/115693833 安装至步骤2.2.4即可 第一步创建本地项目目录 第二步获取他人提供的项目git地址或者自己在网上找的他人项目的git地址 Git 全局设置: git init git config --global user.name “ASxx”…