You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

service.js中axios请求422错误进入成功回调无法捕获如何解决

问题根因

该异常是axios实例配置错误导致的,和service层封装、视图层调用的写法无关。axios默认会将200-299区间外的HTTP状态码判定为请求失败,自动进入Promise的reject分支(即catch回调),所有响应都进入then链只有两种可能:

  1. 响应拦截器的错误处理分支没有抛出异常,直接把错误对象作为正常结果返回,将原本的reject状态改成了resolve
  2. 初始化axios实例时自定义了validateStatus配置,规则设置为所有状态码都判定为请求成功
修复步骤
  • 定位apiService实例的初始化代码,检查响应拦截器逻辑
    错误的拦截器写法会直接return错误响应,导致异常不抛出:
    // 错误示例
    apiService.interceptors.response.use(
      (response) => response.data,
      (error) => {
        // 错误点:直接return错误响应,没有抛出异常
        return error.response
      }
    )
    
    将错误分支修改为抛出异常即可:
    // 修复后
    apiService.interceptors.response.use(
      (response) => response.data,
      (error) => {
        // 两种写法二选一即可,效果一致
        return Promise.reject(error)
        // throw error
      }
    )
    
  • 检查axios实例的validateStatus配置
    如果配置了类似validateStatus: () => true的规则,会导致所有状态码都被判定为成功。如果要保持默认的错误判定逻辑,可直接删除该配置,或显式写为:
    const apiService = axios.create({
      baseURL: '你的接口前缀地址',
      // 仅2xx状态码判定为请求成功
      validateStatus: (status) => status >= 200 && status < 300
    })
    
说明

你当前service层的封装代码、视图层的调用写法本身没有语法问题,不需要修改,修复完axios实例配置后,422等非2xx响应就会正常进入catch分支。

内容的提问来源于stack exchange,提问作者yigitozmen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:36:26