axios的interceptors为何会多次执行
前言
需求背景:不同的接口需求,axios
的拦截器配置也不一样。比如,有的业务场景需要axios
有超时跳转到登录页面,有的业务场景无需该提示,那么该如何编写axios
,最初,我将axios
的response
的拦截器放在函数内,如下代码所示:
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为何会多次执行相关推荐
- Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果...
axios interceptors 拦截器 //interceptors.js// vue axios配置 发起请求加载loading请求结束关闭loading // http request 请求 ...
- axios拦截器interceptors
axios拦截器-interceptors 基本介绍 拦截器: 拦截器是axios向服务器端发送请求和响应回来所经历的两道关口. 拦截器关键字:interceptors. axios本身有两种 ...
- axios mysql_axios的简单使用
既然官方已经说了不在维护vue-resource,那我们就看看axios是怎么使用的.......... 1)get方法的使用 axios.get axios的初步使用 const c1={ temp ...
- 给 axios 和 redux-axios-middleware 添加finally方法 的使用心得
最近公司让用react写一个钉钉的微应用APP 然后就只能去学了react, 之前一直用angular和vue, 所以异步请求用的都是jquery和axios, 想转来转去麻烦 就直接用了axios, ...
- axios拦截器设置及其实现原理剖析
axios使用说明文档 axios拦截器设置 应用场景 请求拦截器用于在接口请求之前做的处理,比如为每个请求带上相应的参数(token,时间戳等). 返回拦截器用于在接口返回之后做的处理,比如对返回的 ...
- 尚硅谷 Ajax与Axios的使用与关键源码 笔记
文章目录 Ajax概述 原生Ajax尝试 请求的发送与请求头配置 JSON支持 IE缓存问题 请求的取消与重发 jQuery的Ajax 使用Axios发送Ajax[简易] 使用fetch发送请求 Aj ...
- 学习 axios 源码整体架构,打造属于自己的请求库
前言 这是学习源码整体架构系列第六篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是主线的具体函数的实现.本篇文章学习的是实际仓库的代码. 学习源码整体 ...
- Vue axios基础
Vue axios基础 基于 promise 的 HTTP 客户端axios axios本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 ...
- axios拦截器的原理及应用
1-1 应用场景: 1. 请求拦截器用于在接口请求之前做的处理,比如为每个请求带上相应的参数(token,时间戳等) 返回拦截器用于在接口返回之后做的处理,比如对返回的状态进行判断(token是否过期 ...
最新文章
- matplotlib 设置图形大小时 figsize 与 dpi 的关系
- VS和matlab混合编程的推荐书籍!
- 在ubuntu16.04.1配置qemu-img,qemu-nbd
- CF-477C(Dreamoon and Strings) DP
- Linux的远程连接及Linux系统下Tomcat部署
- 单片机特殊功能寄存器
- 使用pinyin4j将中文转换为拼音
- 7-3 小L的难题 (15 分)
- 计算机基础及应用期末,《计算机应用基础》期末复习综合练习题及答案
- atmega328p引脚图_Arduino UNO兼容ATmega328开发板-Seeeduino v4.0,附原理图/PCB/使用说明等...
- Nginx缓存静态文件
- 计算机员工信息登录表的论文,企业员工信息管理系统(论文+程序)
- 抖音seo源码二次开发,短视频seo源码二次开发
- IBM硬件默认的管理地址
- undefined和is not defined区别
- 新型冠状病毒的持续了解
- 《Arduino直流电机控制教程》
- Python中使用逻辑与运算符“and”判断两个比较条件是否满足时编辑器提示“Simplify chained comparison ”的解决方法
- 魔术师怎么知道你脑中的数字的?
- 咔咕(聊天工具)---免费绿色版,图片代替了文字
热门文章
- 因为应用程序的并行配置不正确
- echarts入门 常用图表(柱状堆叠图)
- Laravel框架配置日志按天生成在文件中
- 实战案例:横向和纵向的三级下拉菜单需要掌握hover
- c语言的幂乘积表达式,POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
- ntp国家授时中心服务器IP地址
- 答题/题库小程序连载1
- python游戏开发思路:模拟打怪游戏(决策论),怪兽(monster),玩家(hero)
- 外挂辅助技术原理分析
- Rejecting re-init on previously-failed class java.lang.Class