标签:axios chain interceptors response 响应 拦截器 interceptor 源码
该文章紧接着 axios源码解析 - 请求拦截器,简单的补充下。
业务代码如下:
var service = axios.create(); // 响应拦截器 service.interceptors.response.use((response) => { if (response.data.code === 200) { return response.data; } else { return Promise.reject(response.data); } }, (err) => { return Promise.reject(err); });
核心代码如下:
// 请求拦截数组 var requestInterceptorChain = []; this.interceptors.request.forEach(function(interceptor) { requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); }); // 响应拦截数组 var responseInterceptorChain = []; this.interceptors.response.forEach(function(interceptor) { responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); }); var promise; var chain = [dispatchRequest, undefined]; Array.prototype.unshift.apply(chain, requestInterceptorChain); chain = chain.concat(responseInterceptorChain); promise = Promise.resolve(config); while (chain.length) { promise = promise.then(chain.shift(), chain.shift()); } return promise;
多个响应拦截器
主要讲多个响应拦截器的执行顺序,代码如下:
// 第一个响应拦截器 service.interceptors.response.use(fulfilled1, rejected1); // 第二个响应拦截器 service.interceptors.response.use(fulfilled2, rejected2); // 第三个响应拦截器 service.interceptors.response.use(fulfilled3, rejected3); // 根据上述Axios.prototype.request方法,可以知道handlers数组:[fulfilled1, rejected1, fulfilled2, rejected2, fulfilled3, rejected3] // 所以执行顺序:fulfilled1 --> fulfilled2 --> fulfilled3
标签:axios,chain,interceptors,response,响应,拦截器,interceptor,源码 来源: https://www.cnblogs.com/wuzhendong/p/16257857.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。