Axios请求返回值为undefined:then/catch可正常打印数据
问题分析与修复
你的问题出在**loginManager函数里的then()回调没有返回值**,同时混合使用async/await和then/catch写法导致逻辑混乱。
问题根源
- 请求成功时,
then((res) => { console.log(res.data); })里只做了打印,没有返回任何数据,所以await这个Promise链的结果是undefined,最终response变量就是undefined,返回给调用方的data自然也是undefined。 - 虽然
catch()里做了返回,但成功路径没有返回值,导致成功场景下数据无法传递。 async/await本身就是用来替代then/catch的,混合使用反而容易出错,代码可读性也差。
修复后的loginManager代码
import axios from "axios"; const api = axios.create({ baseURL: "http://localhost:8080/", }); export const loginManager = async (values) => { try { const res = await api.post("auth/login", values); console.log(res.data); // 成功时返回响应数据 return res.data; } catch (error) { if (error.response) { console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); return error.response.data; } else if (error.request) { console.log(error.request); return error.request; } else { console.log('Error', error.message); return error.message; } } }; export default api;
修复说明
- 用
try/catch替代then/catch,和async/await写法统一,逻辑更清晰。 - 请求成功时,在
try块里获取响应后返回res.data,确保调用方能拿到数据。 - 错误处理逻辑保留,但整合到
catch块中,错误时返回对应的错误信息,调用方的data就能捕获到错误数据。
调用端代码无需修改
你的组件里的onSubmit逻辑没问题,修复loginManager后,const data = await loginManager(values);就能正常获取到成功的响应数据或错误信息了。
内容的提问来源于stack exchange,提问作者Umar Ahmed
相关产品推荐
相关产品推荐

