vue axios封装,避免重复请求,axios,请求拦截器怎么走失败的回调函数

  vue axios封装,避免重复请求,axios,请求拦截器怎么走失败的回调函数

  我们大家在开发中,经常会遇到接口重复请求导致的各种问题,下面这篇文章主要给大家介绍了关于爱可信拦截器之重复请求取消的相关资料,需要的朋友可以参考下

  

引言

  上一篇介绍了爱可信的简单封装,知道了爱可信拦截器的应用场景和方法,今天来看一下对于响应时间过长且请求次数过高的情况拦截器如何处理。

  

取消请求的方法

  爱可信使用内部提供的取消令牌来取消请求

  官网示例1:用CancelToken.source工厂方法创建取消令牌,像这样

  const CancelToken=axios .取消令牌

  const source=cancel令牌。source();

  axios.get(/user/12345 ,{

  cancelToken: source.token

  }).接住(函数(抛出){

  if (axios.isCancel(thrown)) {

  console.log(请求已取消,扔了。消息);

  }否则{

  //处理错误

  }

  });

  axios.post(/user/12345 ,{

  名称:"新名称"

  }, {

  cancelToken: source.token

  })

  //取消请求(消息参数是可选的)

  source.cancel(用户取消了操作。);

  官网示例2:通过传递一个执行者函数到取消令牌的构造函数来创建取消令牌:

  const CancelToken=axios .取消令牌

  让取消;

  axios.get(/user/12345 ,{

  cancelToken:新的CancelToken(函数执行器(c) {

  //执行者函数接收一个取消函数作为参数

  取消=c;

  })

  });

  //取消请求

  cancel();

  可以看到上面都是在单个请求中创建的取消令牌实际工作中我们需要对所有的请求都进行处理,接下来我们看下如何在拦截器实现取消请求的功能

  

拦截器中取消重复请求

  从" axios "导入爱可信

  从导入baseURL ./config

  从" qs "导入全国工业产品生产许可证

  const挂起请求=new Map();//请求对象

  const CancelToken=axios .取消令牌

  axios.defaults.timeout=30000

  axios。默认值。基本URL=基本URL。目标

  //添加请求拦截器

  axios。截击机。请求。使用(功能(配置){

  //在发送请求之前做些什么

  config.headers={

  "内容类型":"应用程序/json”,

   token: getToken()

  }

  //获取请求键

  设req key=getReqKey(config);

  //判断是否是重复请求

  如果(待定请求。has(请求密钥)){//是重复请求

  移除请求密钥(请求密钥);//取消

  }否则{

  //设置取消令牌

  配置。取消令牌=新的取消令牌(函数执行器(取消){

  pendingRequest.set(requestKey,cancel);//设置

  })

  }

  返回配置;

  },函数(错误){

  //请求错误

  返回承诺。拒绝(错误);

  });

  //添加响应拦截器

  axios。截击机。回应。使用(函数(响应){

  //请求对象中删除请求键

  设req key=getReqKey(响应。config);

  移除请求密钥(请求密钥);

  //对返回数据做点啥比如状态进行拦截

  if (response.data.status!==200) {

  吐司({

  消息:response.data.message

  类型:警告,

  持续时间:1000

  })

  返回

  }

  //没问题返回服务器数据

  返回响应.数据

  },函数(错误){

  let req key=getReqKey(错误。config);

  移除请求密钥(请求密钥);

  //响应错误

  返回承诺。拒绝(错误);

  });

  //获取请求键

  函数getReqKey(配置){

  //请求方式、请求地址、请求参数生成的字符串来作为是否重复请求的依据

  常数{方法,网址,参数,数据}=配置。//解构出来这些参数

  //获取参数后期数据

  const requestKey=[方法,url,qs.stringify(参数),qs.stringify(数据)]。联接("");

  返回请求键

  }

  //取消重复请求

  函数removeReqKey(key) {

  const cancel token=待定请求。get(键);

  取消令牌(键);//取消之前发送的请求

  待定请求。删除(键);//请求对象中删除请求键

  }

  

结语

  以上是对重复请求的处理。如果不清楚拦截器,可以看上一篇文章。如果你有任何问题,请纠正我。我会尽快更新。

  关于vue axios拦截器反复请求取消的这篇文章到此为止。关于axios拦截器的重复请求取消的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: