ajax请求拦截
按照axios
的源码
原理:
const promise = Promise.resolve(config)
return promise.then(request, request).then(request, request).then(ajax).then(response, response)
封装:
function Axios(){
this.request = []
this.response = []
this.interceptors = {
request: (fulfilled, rejected) => {
this.request.push({fulfilled, rejected})
},
response: (fulfilled, rejected) => {
this.response.push({fulfilled, rejected})
}
}
}
Axios.prototype.request = function (dispatchRequest, config){
var chain = [dispatchRequest, undefined];
var promise = Promise.resolve(config);
this.request.forEach(function (interceptor) {
chain.unshift(interceptor.fulfilled, interceptor.rejected);
});
this.response.forEach(function (interceptor) {
chain.push(interceptor.fulfilled, interceptor.rejected);
});
while (chain.length) {
promise = promise.then(chain.shift(), chain.shift());
}
return promise;
}
调用:
const axios = new Axios()
axios.interceptors.request((config)=>{}, (err) => {})
axios.interceptors.response((config)=>{}, (err) => {})
axios.request((config)=> new Promise((resolve, reject) => {ajax(config)}), config)
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
promise
封装一层即可