自己封装的 axios
import axios from "axios";
const instance = axios.create({
baseURL: "http://xxxxxxx:3000",
timeout: 3000,
})
const reqConfigInter = (config) => {
config.headers.Authorization = localStorage.getItem("token");
return config;
}
const reqErrorInter = (error) => {
console.log("req error");
return Promise.reject(new Error("req error"));
}
const resErrorInter = (error) => {
console.log("res error");
return Promise.reject(new Error("res error"));
}
instance.interceptors.request.use(reqConfigInter, reqErrorInter);
instance.interceptors.response.use(null, resErrorInter);
export default instance;
发起请求
import instance from "./axios.js";
export const getUsers = async () => {
try {
const res = await instance.request({
url: "/api/users",
method: "GET"
});
return res;
} catch (error) {
console.log(error); // 怎样才能让这里的 error 变成上面的 reqErrorInter 产生的 new Error("req error")
}
};
不管是把端口号换成错误端口,还是服务端 setTimeout 故意超时,最后得到的错误都是 resErrorInter 拦截后送出的 ResponseError
1
Danswerme 2020-07-27 23:56:14 +08:00 via Android
emm, 拔网线可行?
|
2
noe132 2020-07-28 00:01:22 +08:00
instance.interceptors.request.use(() => Promise.reject(new Error()), reqErrorInter);
|
3
zhuangzhuang1988 2020-07-28 00:44:38 +08:00
基本不使用 axios 的 interceptors, 侵入性太大了.
|
4
KuroNekoFan 2020-07-28 09:57:05 +08:00
`Promise.reject(new Error("req error")); ` 这看着也太麻烦了,就不能直接 throw some obj 吗
|
5
ClownKnight 2020-07-28 12:14:08 +08:00
try..catch 只能捕捉同步错误,promise 是个异步的,可以考虑用 generator 包一层来做 error 控制
|