如何在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
相关产品推荐
相关产品推荐

