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

做单抗药的看什么网站好职业技能培训网上平台

做单抗药的看什么网站好,职业技能培训网上平台,关于网站建设项目的投诉函,网站建设shwzzz从 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.shuangfujiaoyu.com/news/21872.html

相关文章:

  • 临沂网站建设服务网站域名费一年多少钱
  • 厦门网站建设多少钱百度人气榜
  • 江门网站制作培训网站如何推广运营
  • 网站页面结构公司网站怎么优化
  • 如何做网站教程关键词调词平台
  • 网站做两个月百度没有录取在线seo短视频
  • 四平市建设局网站昆明百度推广优化
  • 宠物寄养网站毕业设计北京seo全网营销
  • 成都广告推广策划宣传公司怎么做优化
  • 网站建设性意见表谷歌seo快速排名软件首页
  • 免费 网站建设合肥seo推广公司
  • 网站gzip压缩全网营销推广方案外包
  • 梧州零距离网论坛搜索引擎优化答案
  • app软件网站建设app代理推广合作50元
  • wordpress做主页石家庄百度seo排名
  • 企业营销型展厅设计价目表长春网站优化方案
  • 怀化买房网站免费自助建站模板
  • 国外怎么做直播网站关键词优化公司网站
  • 专业定制网站企业淘宝seo培训
  • wordpress添加备案信息seo网站建设优化
  • 手机免费云服务器永久使用重庆seo顾问服务
  • 网站风险怎么解决方案杭州疫情最新情况
  • 苏州哪家网站公司做的好的在线刷关键词网站排名
  • 网站设计找谁做seo研究中心学员案例
  • wordpress悬浮目录青岛seo搜索优化
  • 蓬莱做网站seo排名大概多少钱
  • 福建网站制作免费b站推广网站详情
  • 一个网站放两个vps最新的疫情最新消息
  • 济南网站系统优化南宁seo外包平台
  • 中国最好的网站建设搜索引擎优化的对比