请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

错误处理疑问

在响应拦截器中判断后端的状态码 errno 不为0时 throw new Error(msg)
但接口中并没有捕获到这个错误导致页面崩溃了,并且控制台中还有个报错信息。

// 响应拦截器
instance.interceptors.response.use(res => { // 成功响应回调函数
  const resData = (res.data || {}) as ResType
  const { errno, data, msg } = resData

  // 需要错误提示
  if (errno !== 0) {
    if (msg) message.error(msg)
    throw new Error(msg)
  }

  return data as any
})

使用时

// 获取单个问卷信息
export async function getQuestionService(id: string): Promise<ResDataType> {
  const url = `/api/question/${id}`;
  const data = (await axios.get(url)) as ResDataType
  return data
}

函数组件中

  useEffect(() => {
    getQuestionService(id).then((data) => {
      console.log(data)
    })
  }, [id])

如果 getQuestionService 调用时后端的 errno 不为0,又没有通过 catch 捕获则控制台报错并且页面崩溃了,如果每个请求都 catch 一下又非常繁琐,请问如何解决这个问题?
图片描述

正在回答 回答被采纳积分+3

1回答

双越 2023-05-13 19:37:36

你这个报错是 504 ,是服务端错误。这和 errno=0 没关系。

errno=0 时服务端不会报错的。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3946981 #1
    报错原因是前端,因为前端响应拦截器里面如果 errno 不是 0 会抛出一个 new Error() 实例,又没有捕获导致页面崩了。这块应该做下处理的
    回复 有任何疑惑可以回复我~ 2023-05-13 22:53:19
  • 双越 回复 提问者 慕粉3946981 #2
    就是想通过 axios 捕获这种非常规的错误?
    回复 有任何疑惑可以回复我~ 2023-05-14 17:46:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信