如果存在多个请求拦截器,那么输出顺序是逆序的
如果存在多个响应拦截器,那么输出顺序是正序的
1 | /* |
拦截器使用
1 | // 设置请求拦截器 config 配置对象 |
axios 对象身上有 interceptors 属性,该属性是一个对象,里面的存在 request 属性,该属性能调用器原型上的 use 方法
源码片段node_modules/axios/lib/core/Axios.js
1 | /** |
InterceptorManager 函数node_modules/axios/lib/core/InterceptorManager.js
1 | //声明构造函数 |
由上面代码可以分析得,Axios 上存在 interceptors 属性,该属性存在 request 和 response 属性,这两个属性是通过 InterceptorManager 拦截器管理器构造出来的实例,那么这两个属性身上有 handlers 数组,且其原型对象上存在 use 方法,调用 use 方法时,会传入成功的回调和失败的回调,在 use 里面会把这两个回调存到 handlers 数组中
模拟实现如下
1 | //构造函数 |
我们还需要修改之前 reqeust 函数中的代码,把拦截器功能加上
1 | Axios.prototype.reqeust = function (config) { |
测试代码
1 | axios.interceptors.request.use( |