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

为何Express返回错误但Promise.allSettled仍显示fulfilled?

问题原因解析
  • 核心原因是Axios的默认行为,和Express(json-server基于Express)返回的内容无关:
    • Axios默认只在请求彻底失败时(比如断网、服务器连不上、DNS解析错误)才会让Promise进入rejected状态;
    • 只要服务器返回了合法的HTTP响应——哪怕是429、500这类错误状态码——Axios都会把对应的Promise标记为fulfilled,只是会把错误信息(比如状态码、响应内容)打包成AxiosError对象作为resolve的结果返回。
  • 你看到AxiosError,是因为Axios内部把非2xx的响应包装成了错误对象,但这并不改变Promise的状态——只要服务器有响应,Promise就会成功resolve这个错误对象。
让对应Promise变成rejected的方法

如果想让4xx/5xx这类错误状态码触发Promise的rejected状态,只需要修改Axios的validateStatus配置,指定只有2xx范围内的状态码才算请求成功:

// 创建Axios实例时配置
const axiosInstance = axios.create({
  validateStatus: (status) => {
    return status >= 200 && status < 300; // 仅2xx状态码视为请求成功
  }
});

之后再请求id=4的接口,Axios就会因为状态码不符合要求抛出错误,对应的Promise就会进入rejected状态,Promise.allSettled里的结果状态也会变成rejected。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:27:28