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

