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

酒业网站模板下载改图在线处理图片

酒业网站模板下载,改图在线处理图片,湛江做网站哪家专业,网站制作需求分析从 v0.22.0 开始,Axios 支持以 fetch API 方式—— AbortController 取消请求 此 API 从 v0.22.0 开始已被弃用,不应在新项目中使用 官网链接 1. 背景 最近项目中遇到一个场景,当连续触发一个请求时,如果是同一个接口&#xf…

从 v0.22.0 开始,Axios 支持以 fetch API 方式—— AbortController 取消请求

此 API 从 v0.22.0 开始已被弃用,不应在新项目中使用

官网链接

1. 背景

最近项目中遇到一个场景,当连续触发一个请求时,如果是同一个接口,则保留最后一次的请求,之前的请求取消。

查阅了下axios文档,有一个属性CancelToken,把这个添加到axios配置中

 

2. 使用

1:在request时,添加cancelToken

  request: [(config: AxiosRequestConfig) => {const cacheKey = `${config.method}${config.url}`if (config.autoCancel) {removeCache(cacheKey)}config.cancelToken = new axios.CancelToken((c) => {caches[cacheKey] = c})return config},(error: any) => Promise.reject(error),],

2:在reponse时,删除key

  response: [(res: AxiosResponse) => {const cacheKey = `${res.config.method}${res.config.url}`if (res.config.autoCancel) {removeCache(cacheKey)}return res},(error: any) => Promise.reject(error),],

3:判断是否存在重复请求

const caches: Record<string, Canceler> = {}
function removeCache(key: string) {if (caches[key]) {caches[key]()delete caches[key]}
}

这里的autoCancel是为了解决url相同,请求参数不同时,自定义添加的,具体请求方式可以根据这个值来决定是否开启cancelToken

3. 全部代码

/*** 通过取消重复请求解决请求“竞态”问题* - 如何定义“重复”:method和url相同*/
import axios, { AxiosRequestConfig, Canceler, AxiosResponse } from 'axios'const caches: Record<string, Canceler> = {}
function removeCache(key: string) {if (caches[key]) {caches[key]()delete caches[key]}
}const cancelInterceptors = {request: [(config: AxiosRequestConfig) => {const cacheKey = `${config.method}${config.url}`if (config.autoCancel) {removeCache(cacheKey)}config.cancelToken = new axios.CancelToken((c) => {caches[cacheKey] = c})return config},(error: any) => Promise.reject(error),],response: [(res: AxiosResponse) => {const cacheKey = `${res.config.method}${res.config.url}`if (res.config.autoCancel) {removeCache(cacheKey)}return res},(error: any) => Promise.reject(error),],
}export default cancelInterceptors

在封装的axios里面添加配置

// 往request请求中添加配置
service.interceptors.request.use(...cancelInterceptors.request)// 往response请求中添加配置
service.interceptors.response.use(...cancelInterceptors.response)

在response失败error中axios返回了一个失败状态axios.isCancel(error)

(error: AxiosError) => {// if (axios.isCancel(error) && error.message === SCRM_CANCEL_MESSAGE) {//   // 被手动取消的数据统计接口,不展示提示if (axios.isCancel(error)) {// 被取消的接口,不展示提示} else {message.error(error.response?.statusText || error.message || '网络错误')}// 网络层面错误,如接口地址写错了会走到这里return Promise.reject(error)}

3. 原理

source file:axios/lib/adapters/xhr.js

1:创建请求

var request = new XMLHttpRequest()if (config.cancelToken) {// Handle cancellationconfig.cancelToken.promise.then(function onCanceled(cancel) {if (!request) {return;}request.abort();reject(cancel);// Clean up requestrequest = null;});
}

2:创建新的取消

在source file:axios/lib/cancel/CancelToken.js

  var token = this;executor(function cancel(message) {if (token.reason) {// Cancellation has already been requestedreturn;}token.reason = new Cancel(message);resolvePromise(token.reason);});
}

2:取消请求

 在axios/lib/adapters/xhr.js文件中取消request.abort();请求,

if (config.cancelToken) {// Handle cancellationconfig.cancelToken.promise.then(function onCanceled(cancel) {if (!request) {return;}request.abort();reject(cancel);// Clean up requestrequest = null;});}

笔记 

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

相关文章:

  • 长沙专业个人做网站哪家好网站建设完成以后应该怎样备份
  • 北京网站建设升上去工具型网站有哪些
  • 企业网站建设的三种方式好的手机端网站模板下载安装
  • 私人定制网站网站搭建心得体会
  • 湖南电子科技网站建设如何免费建立可以交流的网站
  • 深圳哪家制作网站好网站品牌形象设计怎么做
  • phpcms 下载网站模板互联网技术专业
  • 网站策划预算怎么做wordpress好慢
  • 正规的网站制作服务商深圳个人网站设计
  • 需要前置审批的网站网站出现弹窗
  • 餐饮门户网站源码discuz网站ip
  • 企业备案做电影网站的后果闵行网站建设哪家好
  • 怎么做淘宝客网站江西港航建设投资有限公司网站
  • 仿百度文库网站源码商业版dedecms(梦织)系统内核工业贸易企业 营销型网站
  • 做网站的费用是多少钱wordpress 仿值得买
  • 网站做不做301巢湖网站制作
  • 网站模块划分规划中国企业信息公示网登录
  • 邢台网站关键词优化韩城网站建设
  • 专注苏州网站建设深圳市网站备案
  • 域名备案完成了怎么建设网站建设外贸网站要多少钱
  • 做网站备案 空间是什么意思邯郸网站设计多少钱
  • WordPress可以做大网站吗网站设计风格及特点
  • 九亭网站建设做企业咨询管理怎么样
  • 建设三类人员报考网站重庆建网站推广价格
  • 网站网页打不开怎么办为网站网站做代理怎么判
  • 欧美 手机网站模板下载 迅雷下载 迅雷下载 迅雷下载地址哈尔滨 做网站
  • 东莞seo网站优化运营东莞如何建设网站制作平台
  • 金融直播间网站建设网站开发凭证做什么科目
  • 购买域名后如何建设网站网站开发需求收集 模板
  • 网站后台怎么修改文字网站维护的内容主要包括