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

Axios Post在React Native中有时返回Undefined的问题排查

为何我的axios post请求有时会返回undefined?

以下是相关代码:

export const ApiConfigAxios = axios.create({    
    // * Begin =========================== Configuration API

    baseURL: 'https://website.id/index.php',    
    withCredentials: true,
    headers: {
        "Accept": "application/json",
        "Content-Type": "application/json",                              
        "Authorization": `Basic ${base64data}`,        
    },    

    // * End =========================== Configuration API

});


export const ApiRegisterOrLoginUser = async (email, name, picture, givenname, familyname) => {               
    try {
        // * Begin =========================== API    
        
        const response = await ApiConfigAxios.post('/AuthenticationAPI', {        
            email: email,
            name: name,
            picture: picture,
            givenname: givenname,        
            familyname: familyname,                                        
        });

        // * End =========================== API     
    
    
        if (response.data.Data.length === 2) {           
            let results = Object.assign(response.data.Data[0], response.data.Data[1]);            
            return results;
        } else {                    
            return response.data;
        }
        

    } catch (err) {                                  
        console.error(err);       
    }    
};

问题场景:在安卓设置中清除应用数据后打开应用,立即点击登录按钮会得到undefined;但等待至少3秒后点击则正常,请问这是什么问题?


问题原因分析及解决办法

1. base64data未完成初始化

代码中请求头的Authorization依赖base64data变量,清除应用数据后重启应用时,该变量可能还没完成初始化(比如从本地存储读取、异步生成的逻辑还没走完)。此时立即发起请求,Authorization字段会变成Basic undefined,后端会拒绝该请求,触发catch块。而当前catch块仅打印错误,没有任何返回值,导致调用ApiRegisterOrLoginUser时拿到undefined。等待3秒后base64data初始化完成,请求头合法,接口就能正常返回数据。

2. 跨域凭证初始化延迟

因为开启了withCredentials: true,清除应用数据后,应用与服务器的会话凭证(如Cookie)需要重新建立。立即发起请求时,凭证还未完成初始化,后端会拦截请求,同样触发catch块导致返回undefined。

对应解决措施

  • 确保base64data初始化完成后再允许请求:
    将base64data的生成逻辑改为异步等待模式,或者在应用启动阶段先完成该变量的初始化,再启用登录按钮(比如给按钮加加载状态,初始化完成前禁用点击)。
  • 完善catch块返回逻辑:
    当前catch块无返回值是导致undefined的直接原因之一,可修改为抛出错误或返回明确的错误对象,让调用方知晓请求失败原因:
    catch (err) {                                  
        console.error(err);       
        throw err; // 或返回统一格式的错误对象:return { success: false, errorMsg: err.message }
    }
    
  • 排查后端认证逻辑:
    确认后端在收到无效Authorization头或未建立会话时,是否返回标准的错误响应,而非直接断开连接,这样axios能准确捕获错误信息,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:25:22