import axios from 'axios';
import { Loading, Message } from 'element-ui';
let loadingInstance;
// 请求拦截器
axios.interceptors.request.use(config => {
// 显示全局loading
loadingInstance = Loading.service({ fullscreen: true });
return config;
}, error => {
// 请求错误处理
Message.error('请求错误,请稍后再试');
return Promise.reject(error);
});
// 响应拦截器
axios.interceptors.response.use(response => {
// 关闭全局loading
if (loadingInstance) loadingInstance.close();
return response;
}, error => {
// 关闭全局loading
if (loadingInstance) loadingInstance.close();
// 响应错误处理
Message.error('请求失败,请稍后再试');
return Promise.reject(error);
});
// 导出axios实例
export default axios;
这段代码实现了axios请求的全局loading效果,在请求被拦截时显示全局loading,在请求结束(无论成功或失败)后关闭loading。成功的响应会正常返回数据,失败的响应会弹出错误消息并返回一个拒绝的Promise。这样的封装可以提高用户体验,并减少重复的加载和错误处理代码。