axios 如何获得一个 RequestError

2020-07-27 22:55:22 +08:00
 YuxiangLuo

自己封装的 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

1635 次点击
所在节点    Vue.js
5 条回复
Danswerme
2020-07-27 23:56:14 +08:00
emm, 拔网线可行?
noe132
2020-07-28 00:01:22 +08:00
instance.interceptors.request.use(() => Promise.reject(new Error()), reqErrorInter);
zhuangzhuang1988
2020-07-28 00:44:38 +08:00
基本不使用 axios 的 interceptors, 侵入性太大了.
KuroNekoFan
2020-07-28 09:57:05 +08:00
`Promise.reject(new Error("req error")); ` 这看着也太麻烦了,就不能直接 throw some obj 吗
ClownKnight
2020-07-28 12:14:08 +08:00
try..catch 只能捕捉同步错误,promise 是个异步的,可以考虑用 generator 包一层来做 error 控制

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693581

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX