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

福安网站建设h5开网站开发教程

福安网站建设,h5开网站开发教程,医院网站主页面设计,网站为什么要做seoAbortController 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/14449/

相关文章:

  • 网站排名应该怎么做长扬科技北京有限公司
  • 专业制作网站哪家好合同备案号查询系统
  • 安卓网站开发视频中文搜索引擎大全
  • 苏州建设网站做网站用哪个笔记本
  • 制作企业网站新闻列表页面网页设计实训报告排版漂亮的网站
  • 自己搭建网站要钱吗西宁做网站君博推荐
  • 东营做网站多少钱班级优化大师免费下载电脑版
  • 行业网站建设申请报告wordpress标签静态化
  • 网站建设佰首选金手指三十运营网站流程
  • 做网站网站的qq安全中心信任网站
  • 中国最大房产网站排名机关网站制度建设
  • 上海的建设项目招投标在哪个网站wordpress媒体库上传电影
  • 方城网站制作泰安软件公司 泰安网站建设
  • 网站做常规优化全栈工程师是做网站吗
  • 网站界面设计的相关指南备案 手机网站
  • 织梦做的网站后台玉环网站建设公司
  • 外贸网站建设推广费用wordpress 搭建可视化
  • 聚美联盟网站怎么做中国建设银行网站的主要功能
  • 合肥有多少建网站公司wordpress前端插件
  • 做网站需要哪类商标网站降权恢复
  • 网站建设 跑业务可视化app开发工具安卓版
  • 汽车类网站建设预算网站建设和设计
  • 单页销售网站源码上海网站开发哪里有
  • 网站建设注意事情利用php做直播网站
  • 青梦建站wordpress底部自豪
  • 红袖添香网站建设时间淘客推广网站怎么做的
  • 有模板如何做网站外贸建立网站怎么做
  • 保山市住房和城乡建设局网站网站外链平台的建设方法平台类型(至少5个)?
  • 网站怎么做跳转页面服务器可以吧网站做跳转吗
  • 北京网站建设网建个人网站怎么赚钱