当前位置: 首页 > news >正文

上海中艺建设集团网站提高网站加载速度iis

上海中艺建设集团网站,提高网站加载速度iis,广州新冠最新情况,安阳做网站的费用AbortController AbortController() 构造函数创建了一个新的 AbortController 实例。MDN官网给出了一个利用AbortController取消下载视频的例子。 核心逻辑是:利用AbortController接口的只读属性signal标记fetch请求;然后在需要取消请求的时候&#xff0…

AbortController

   AbortController() 构造函数创建了一个新的 AbortController 实例。MDN官网给出了一个利用AbortController取消下载视频的例子。

         核心逻辑是:利用AbortController接口的只读属性signal标记fetch请求;然后在需要取消请求的时候,调用AbortController接口的abort()方法立即取消请求,并抛出一个错误AbortError

const controller = new AbortController();
const signal = controller.signal;const url = "video.mp4";
const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");downloadBtn.addEventListener("click", fetchVideo);abortBtn.addEventListener("click", () => {controller.abort();console.log("Download aborted");
});function fetchVideo() {fetch(url, { signal }).then((response) => {console.log("Download complete", response);}).catch((err) => {console.error(`Download error: ${err.message}`);});
}

只读属性signal

        AbortController接口的只读属性 signal 返回一个 AbortSignal 实例对象,该对象可以根据需要处理 DOM 请求通信,既可以建立通信,也可以终止通信。

方法:abort()

        AbortController接口的 abort() 方法会在 DOM 请求完成之前中止它。它能够中止 fetch 请求、各种响应主体或者流的消耗。

取消Axios请求

既然 AbortController接口的 abort() 方法可以终止fetch请求、各种响应主体或者流的消耗,那么我们考虑将其和axios结合,来取消axios的请求。

        查看axios官网,也给出了相关介绍:

        为了便于在项目中使用,我们在对其进行一个简单的封装,示例如下:

//axios配置function createRequest() {const request = axios.create({baseURL: "https://geo.datav.aliyun.com",headers: {"Content-Type": "application/json;charset=utf-8",}})const cachePool = new Map()const encode = (baseURL, method, url, params) => {const str = `${baseURL}_${url}_${method}_${JSON.stringify(params || {})}`;const encoder = new TextEncoder();//接受一个字符串作为输入,返回一个包含 UTF-8 编码的文本的 Uint8Arrayconst bytes = encoder.encode(str)//使用Base64编码算法进行编码:将一个二进制字符串(例如,将字符串中的每一个字节都视为一个二进制数据字节)编码为 Base64 编码的 ASCII 字符串const encoded = btoa(String.fromCharCode(...bytes))return encoded}/*** 对Axios请求实例的config进行编码* */const configEncode = (config) => {//获取基本信息const baseURL = config.baseURL,method = config.method,url = config.url,params = config?.params || config?.data || {};//返回编码结果return encode(baseURL, method, url, params);}//请求拦截器request.interceptors.request.use((config) => {// 在发送请求之前做些什么console.log(config)const controller = new AbortController()config.signal = controller.signal//根据config配置信息进行编码const encodeKey = configEncode(config)console.log("encodeKey:", encodeKey)//判断请求是否存在if (cachePool.get(encodeKey)) {controller.abort()console.log('cachePool--cancel:', cachePool)} else {cachePool.set(encodeKey, { abort: controller })console.log('cachePool--set:', cachePool)}return config;},(error) => {// 对请求错误做些什么console.log(error);return Promise.reject(error);});//响应拦截器// 添加响应拦截器request.interceptors.response.use(function (response) {// 2xx 范围内的状态码都会触发该函数。// 对响应数据做点什么const encodeKey = configEncode(response.config)console.log('response---:', response, encodeKey)//缓存对象const cacheItem = cachePool.get(encodeKey)if (cacheItem) {console.log("res-success:删除缓存对象")cachePool.delete(encodeKey)}return response;}, function (error) {// 超出 2xx 范围的状态码都会触发该函数。// 对响应错误做点什么console.log('axios-error:', error)if (error.code === "ERR_CANCELED") {//被取消的axios请求console.warn(`被取消的重复请求~`)} else {//其它错误return Promise.reject(error);}});//返回return request}

        接下来做个简单的测试,

        const request = createRequest()const getData = () => {return request.get("/areas_v3/bound/420800_full.json", {params: {a: 1}})}getData().then(result => {console.log(result)})getData().then(result => {console.log(result)})getData().then(result => {console.log(result)})

        查看执行结果:连续发送了3次请求,后两个被取消掉,最终只有一个请求正常返回了请求结果。

其它取消Axios请求的方式

        参考:Vue:Axios前端拦截器_vue axios拦截器-CSDN博客

http://www.yayakq.cn/news/774286/

相关文章:

  • 新网站建设需要注意免费站群系统
  • 公司手机网站开发招标书蔚县做网站
  • 网络公司网站建设规划网络公司什么意思
  • 广州网站建设设计厂家网站集群怎么做
  • 如何把物流做免费网站网站维护主要从哪几个方面做
  • 盐城网站建设价位室内设计的软件有哪些
  • 自己的网站 做采集怎么做城市建设杂志社官方网站
  • 织梦网站栏目不显示不出来一WordPress
  • 有趣的网站名称游戏网站建设计划书
  • 自己做的网站百度收索不到wordpress图片转文字
  • 建设银行网站特点农产品网站开发 文献综述
  • 山西云起时网站建设阳江一中启业网
  • 如何为一个网站做短连接下载班级优化大师并安装
  • 百度网址大全网站中国建设银行网站主要功能
  • 网站维护和推广方案手机网站建站公司有哪些
  • 北京网站建设哪家最好安阳市网站建设的公司
  • 简单网站建设的费用微信微网站开发报价
  • 河南建设网站信息查询中心民宿网站开发的开题报告
  • 信息网站建设汇报企业如何做好网站运营
  • 网站建设大作业论文科技网站设计公司
  • 合肥网站制作培训做淘宝设计能做网站吗
  • 哪个做网站的公司好章丘灵通环保设备在哪个网站上做的
  • 电子商务网站建设和维护怎么自己做投票网站
  • 美食网站建设项目分析报告windows优化软件哪个好
  • 专业网站建设设计装饰馀姚网站建设
  • 做纺织的用什么网站简述酒店类网站开发的策略
  • 投票网站模板寻找南昌网站设计单位
  • 佘山做网站公司eefocus电子工程网
  • 河南如何建网站要什么条件油画风网站
  • 上海市工程信息网站工程建设标准网站