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

Axios配合Promise.allSettled发起请求返回value为undefined问题

问题原因分析

axios 默认会将 HTTP 状态码不在 2xx 区间的请求标记为 rejected 状态,你当前所有请求都返回 fulfilled 状态且 value 为 undefined,本质是 Promise 状态被提前篡改,常见原因有3种:

  • 全局或你使用的 axios 实例配置了异常的响应拦截器
    如果你配置的响应拦截器错误回调中,没有抛出错误、也没有返回 Promise.reject(error),而是直接返回空值,就会出现该问题,错误示例如下:
    axios.interceptors.response.use(
      res => res,
      err => {
        console.log(err.message)
        // 这里没有返回 reject 状态的 Promise,直接return会把状态转为 fulfilled,值为 undefined
        return
      }
    )
    
  • 自定义了 validateStatus 配置,同时成功拦截器逻辑异常
    如果你配置了 validateStatus: status => status < 500 这类规则,会把 400 判定为合法状态,进入成功响应回调,如果此时成功回调的处理逻辑出错、没有返回响应对象,也会导致 value 为 undefined。
  • 生成 promise 数组时额外加了空的 catch 处理
    如果你的实际代码是类似以下写法,也会把 rejected 状态转为 fulfilled,值为 undefined:
    var promises = urls.map(url=> axios.get(url).catch(err => {}));
    
排查方案
  • 先临时注释所有 axios 响应拦截器配置,运行示例代码确认返回结果是否符合预期
  • 检查 axios 实例的 validateStatus 配置是否被修改
  • 确认批量生成 promise 时没有额外的 catch 空处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:54:05