前言

需求背景:不同的接口需求,axios的拦截器配置也不一样。比如,有的业务场景需要axios有超时跳转到登录页面,有的业务场景无需该提示,那么该如何编写axios,最初,我将axiosresponse的拦截器放在函数内,如下代码所示:

function genHcParams() {let hcParams = {}let axios = serviceif (window.globalApi) {if (globalApi.useAxiosInterceptors) {axios.interceptors.response.use(response => {if (response && response.headers) {const json = response.dataif (json && json.status) {if (json.status === 'jump') {if (json.result.redirect) {setTimeout(() => {window.location.href = json.result.redirect}, 200)}return}}if (json) {return json}return response} else if (response) {return response}})} else {axios.interceptors.response.use(response => {return response.data})}if (globalApi.isHc || globalApi.isLocalSetZz) {hcParams.ak = 'ebf48ecaa1fd436fa3d40c4600aa051f'axios = serviceHc} else if (globalApi.isMars) {} else {hcParams.coordinate = 'wgs84'}}return {hcParams,axios}

可是遇到一个问题,后端只返回一次接口数据,为何axios.interceptors.response.use里面的函数会被多次执行?

原因

若你使用use,就像Node.js里的use那样,会不断地往axios对象添加interceptors,由于我将该拦截器放在函数内,只要函数被执行,则会再次将拦截器函数增添到axios对象上。

所以,推荐的办法是,将拦截器放在函数外,可我的需求决定了,我必须将它放在函数内,那么该如何解决呢?

方法

添加该文件内的唯一变量标识符let axiosInterceptor = undefined,只要拦截器存在,则不会继续添加,部分代码如下所示:

let axiosInterceptor = undefined;...if (globalApi.useAxiosInterceptors) {if (axiosInterceptor === undefined) {axiosInterceptor = axios.interceptors.response.use(response => {if (response && response.headers) {const json = response.dataif (json && json.status) {if (json.status === 'jump') {if (json.result.redirect) {setTimeout(() => {window.location.href = json.result.redirect}, 200)}return}}if (json) {return json}return response} else if (response) {return response}})}} else {if (axiosInterceptor === undefined) {axiosInterceptor = axios.interceptors.response.use(response => {if (response && response.data) return response.data})}}...

axios的interceptors为何会多次执行相关推荐

  1. Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果...

    axios interceptors 拦截器 //interceptors.js// vue axios配置 发起请求加载loading请求结束关闭loading // http request 请求 ...

  2. axios拦截器interceptors

    axios拦截器-interceptors 基本介绍 拦截器: ​ 拦截器是axios向服务器端发送请求和响应回来所经历的两道关口. ​ 拦截器关键字:interceptors. axios本身有两种 ...

  3. axios mysql_axios的简单使用

    既然官方已经说了不在维护vue-resource,那我们就看看axios是怎么使用的.......... 1)get方法的使用 axios.get axios的初步使用 const c1={ temp ...

  4. 给 axios 和 redux-axios-middleware 添加finally方法 的使用心得

    最近公司让用react写一个钉钉的微应用APP 然后就只能去学了react, 之前一直用angular和vue, 所以异步请求用的都是jquery和axios, 想转来转去麻烦 就直接用了axios, ...

  5. axios拦截器设置及其实现原理剖析

    axios使用说明文档 axios拦截器设置 应用场景 请求拦截器用于在接口请求之前做的处理,比如为每个请求带上相应的参数(token,时间戳等). 返回拦截器用于在接口返回之后做的处理,比如对返回的 ...

  6. 尚硅谷 Ajax与Axios的使用与关键源码 笔记

    文章目录 Ajax概述 原生Ajax尝试 请求的发送与请求头配置 JSON支持 IE缓存问题 请求的取消与重发 jQuery的Ajax 使用Axios发送Ajax[简易] 使用fetch发送请求 Aj ...

  7. 学习 axios 源码整体架构,打造属于自己的请求库

    前言 这是学习源码整体架构系列第六篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是主线的具体函数的实现.本篇文章学习的是实际仓库的代码. 学习源码整体 ...

  8. Vue axios基础

    Vue axios基础 基于 promise 的 HTTP 客户端axios axios本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 ...

  9. axios拦截器的原理及应用

    1-1 应用场景: 1. 请求拦截器用于在接口请求之前做的处理,比如为每个请求带上相应的参数(token,时间戳等) 返回拦截器用于在接口返回之后做的处理,比如对返回的状态进行判断(token是否过期 ...

最新文章

  1. matplotlib 设置图形大小时 figsize 与 dpi 的关系
  2. VS和matlab混合编程的推荐书籍!
  3. 在ubuntu16.04.1配置qemu-img,qemu-nbd
  4. CF-477C(Dreamoon and Strings) DP
  5. Linux的远程连接及Linux系统下Tomcat部署
  6. 单片机特殊功能寄存器
  7. 使用pinyin4j将中文转换为拼音
  8. 7-3 小L的难题 (15 分)
  9. 计算机基础及应用期末,《计算机应用基础》期末复习综合练习题及答案
  10. atmega328p引脚图_Arduino UNO兼容ATmega328开发板-Seeeduino v4.0,附原理图/PCB/使用说明等...
  11. Nginx缓存静态文件
  12. 计算机员工信息登录表的论文,企业员工信息管理系统(论文+程序)
  13. 抖音seo源码二次开发,短视频seo源码二次开发
  14. IBM硬件默认的管理地址
  15. undefined和is not defined区别
  16. 新型冠状病毒的持续了解
  17. 《Arduino直流电机控制教程》
  18. Python中使用逻辑与运算符“and”判断两个比较条件是否满足时编辑器提示“Simplify chained comparison ”的解决方法
  19. 魔术师怎么知道你脑中的数字的?
  20. 咔咕(聊天工具)---免费绿色版,图片代替了文字

热门文章

  1. 因为应用程序的并行配置不正确
  2. echarts入门 常用图表(柱状堆叠图)
  3. Laravel框架配置日志按天生成在文件中
  4. 实战案例:横向和纵向的三级下拉菜单需要掌握hover
  5. c语言的幂乘积表达式,POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
  6. ntp国家授时中心服务器IP地址
  7. 答题/题库小程序连载1
  8. python游戏开发思路:模拟打怪游戏(决策论),怪兽(monster),玩家(hero)
  9. 外挂辅助技术原理分析
  10. Rejecting re-init on previously-failed class java.lang.Class