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

如何在Axios中捕获404错误?现有代码catch块无法触发如何解决

核心原因

axios.post() 本身返回的是Promise异步对象,你当前写法中的try...catch属于同步代码块,仅能捕获同步执行阶段抛出的错误,无法捕获异步Promise后续抛出的reject错误。你直接将Promise返回后,该Promise的404 reject状态没有被当前上下文捕获,就会向上层抛出,只有外层调用方处理该Promise的reject状态时才能抓到错误。

修复方案

方案1:async/await改写(适配现有try catch结构)

将当前外层函数改为async函数,通过await等待异步请求执行完成,此时Promise的reject会被转为同步可捕获的错误,可被当前try catch正常接住:

import axios from "axios";

// 给外层函数添加async标识
async function yourFunctionName() {
  try {
    // 新增await等待请求结果返回
    return await axios.post("http://localhost:5000/api/featureFlagBadURL", {
      flagName: "newJqueryAjaxListener",
      defaultValue: "false",
    });
  } catch (error) {
    return { data: 'false' }
  }
}

方案2:Promise链式挂载catch(无需修改async属性)

如果不想修改外层函数的async属性,可以直接给返回的axios请求挂载catch回调处理错误,无需保留原有try catch结构:

import axios from "axios";

function yourFunctionName() {
  return axios.post("http://localhost:5000/api/featureFlagBadURL", {
    flagName: "newJqueryAjaxListener",
    defaultValue: "false",
  })
  // 链式挂载catch处理请求错误
  .catch(error => {
    return { data: 'false' }
  })
}
补充说明
  • 如果你修改过axios的全局/实例validateStatus配置,需要确认该配置是否将404状态码判定为请求失败:axios默认规则是status >= 200 && status < 300时resolve请求,其余情况reject,如果自定义规则把404归为resolve状态,也不会触发catch逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:00