这两个功能都是用拦截器实现。
前景提要:
ts 简易封装 axios,统一 API
实现在 config 中配置开关拦截器
全局错误处理
在构造函数中,添加一个响应拦截器即可。在构造函数中注册拦截器的好处是,无论怎么实例化封装类,这个错误拦截器都会被注册进实例。
其中有个注意点,就是请求取消。取消请求会导致响应 promise 状态为 rejected,这样就会触发响应拦截器的 onRejected 回调。因此要单独处理请求的请求情况,将它与请求错误区分开来。
class HttpRequest {
private readonly instance: AxiosInstance;
constructor(config: MyAxiosRequestConfig) {
this.instance = axios.create(config);
// axios http 错误处理(超出 2xx 范围的 http 状态码都会触发该函数)
this.instance.interceptors.response.use(null, (error: AxiosError) => {
// 手动取消请求会导致“错误”触发
if (error.message === "canceled") alert("请求取消成功");
const {
response } = error;
// 1. 请求超时 && 网络错误单独判断,因为没有 response
if (error.message.indexOf("timeout") !== -1) alert("请求超时!请您稍后重试");
if (error