axios如何在使用全局拦截的情况下为某个请求单独设置响应拦截?如图,这里响应出现异常,会直接弹出异常提示,但是某些接口我不想直接弹异常,所以有没有什么比较好的方法能再度拦截一下?本来想着如果可以传入一个回调,没传就执行默认异常逻辑,但是琢磨了半天好像这个回调不好实现啊
axios如何在使用全局拦截的情况下为某个请求单独设置响应拦截?如图,这里响应出现异常,会直接弹出异常提示,但是某些接口我不想直接弹异常,所以有没有什么比较好的方法能再度拦截一下?本来想着如果可以传入一个回调,没传就执行默认异常逻辑,但是琢磨了半天好像这个回调不好实现啊
在使用全局拦截器的情况下为某个请求单独设置响应拦截,可以在创建axios实例时,为该请求单独配置一个response interceptor。
在axios中,可以在创建axios实例时,配置拦截器。这样,当请求被发送时,会先经过这些拦截器。
示例如下:
const axiosInstance = axios.create({
baseURL: 'https://api.example.com',
timeout: 1000,
responseType: 'json',
headers: {
'X-Custom-Header': 'foobar'
},
interceptors: {
response: [
// global response interceptor
function(response) {
// do something with response data
return response;
},
// or handle error with Promise.reject()
function(error) {
// do something with response error
return Promise.reject(error);
}
]
}
});
然后在某个请求中,不使用这个全局的response interceptor,而是使用axiosInstance的instance方法来配置这个请求的response interceptor。示例如下:
axiosInstance.get('/some/api/url')
.then(function (response) {
// handle response data
})
.catch(function (error) {
// handle response error
});
可以取到请求路径嘛,设置一个数组,把不需要处理异常结果的请求路径放在里面。
捕捉到异常时候,做个对比判断
service.interceptors.response.use(
async (res) => {
const pathList = ['/rf/company/overdueSmsNotify']
if (pathList.includes(res.config.url)) {
return;
}
}
)
6 回答2.9k 阅读✓ 已解决
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
可以添加自定义是否显示异常提示的参数,大致逻辑如下:
在发送请求的地址配置自定义参数,比如:
showErrorTips
拦截响应中处理是否显示提示
true
,则所有接口就会展示提示,个别不需要展示,则在请求配置为false