JS使用Axios调用异步函数获取MongoDB数据返回undefined解决方法
问题根因
- 你的API封装函数
getNotesFromDB没有对外返回有效结果:finally块内的return仅作用于finally的回调函数,不会作为外层async函数的返回值,所以函数执行后默认返回undefined。 - async/await与then/catch混用的写法逻辑冗余,容易出现作用域相关的赋值、返回问题。
修复方案
1. 修改API封装文件代码
推荐直接返回axios请求实例,同时统一处理返回值和异常,不需要额外定义中间变量:
export async function getNotesFromDB(googleId) { try { const notesDB = await axios.get(url + "/note/" + googleId, { withCredentials: true }); // 若需要直接返回业务数据,可改为 return notesDB.data return notesDB; } catch (error) { console.log(error); return null; } }
如果要保留你原来的then/catch写法,只需要在await语句结束后返回answer即可:
export async function getNotesFromDB(googleId) { let answer; await axios .get(url + "/note/" + googleId, { withCredentials: true }) .then((notesDB) => { answer = notesDB; }) .catch((error) => { console.log(error); answer = null; }); // 在外层函数作用域返回结果 return answer; }
2. 调用逻辑校验
你当前index.jsx中的调用逻辑没有问题,修复API文件后,result就能正常拿到返回的接口数据或者异常时的null值。
内容的提问来源于stack exchange,提问作者Alon Ben Yaakov
相关产品推荐
相关产品推荐

