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

无法获取服务器响应:Axios请求跳过.then回调问题求助

排查注册请求未进入.then回调的问题

问题代码

axiosClient.post("/signup", payload)
    .then(({ data }) => {
        setUser(data.user);
        setToken(data.token);
        console.log('data', data);
    })
    .catch((err) => {
        const response = err.response;
        if (response && response.status === 422) {
            setErrors(response.data.errors);
        }
    });

服务器响应详情

服务器返回422 Unprocessable Entity状态码,响应体内容为:

{"errors":{"email":["The email has already been taken."]}}

核心问题分析

  1. 请求并未进入.then,而是进入了.catch:axios会将所有状态码≥400的响应判定为错误,直接进入catch分支。你看到的"跳过then、data打印null"是误解——then里的console.log('data', data)根本没有执行。
  2. 当前catch逻辑存在盲区:你的代码只处理了422状态码的错误,但如果存在其他错误(比如网络中断、服务器5xx错误),会直接跳过错误处理,让你误以为请求"直接走向后续逻辑"。
  3. 业务校验不通过:服务器返回的错误明确提示邮箱已被注册,这是422错误的直接原因。

修复与排查步骤

  • 补全错误日志,明确错误细节:在catch中添加全量错误打印,确认错误类型:
.catch((err) => {
    console.error('注册请求错误详情:', err); // 新增日志,查看完整错误信息
    const response = err.response;
    if (response && response.status === 422) {
        setErrors(response.data.errors);
    } else {
        // 处理其他类型错误,比如网络故障、服务器内部错误
        alert('注册失败,请稍后重试');
        console.error('非422错误:', err.message);
    }
});
  • 验证请求参数:使用未注册的邮箱重新发起请求,确认业务校验通过后是否能正常进入.then分支。
  • 检查axios全局配置:确认axiosClient是否配置了全局响应拦截器,是否存在将4xx状态码标记为成功响应的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:49:55