Firebase实时数据库get函数返回Promise而非具体值的解决咨询
问题解决方法
你的getData函数有两个关键问题导致返回Promise而非实际数据:
- 虽然用了
await,但没有把异步操作的结果返回给外层函数,async函数默认会返回一个Promise,没有return的话这个Promise最终resolve的值是undefined - 混合使用
await和.then()写法冗余,而且.then()回调里的return只对回调函数生效,不会影响外层的getData函数返回值
修正后的getData函数
const getData = async () => { const dbRef = ref(getDatabase()); // 用await直接获取get操作的结果,替代.then() const snapshot = await get(child(dbRef, `users/${user.uid}`)); if (snapshot.exists()) { console.log("snap", snapshot.val()); // 直接返回用户数据,async函数会自动把这个值包装成resolved状态的Promise return snapshot.val(); } // 可选:如果数据不存在,返回默认值比如null return null; };
正确调用方式
因为getData是async函数,它的返回值始终是Promise,所以不能直接赋值,必须用以下两种方式获取数据:
方式1:在async函数内用await调用
// 比如在另一个async函数里 const fetchData = async () => { let check = await getData(); console.log("check", check); // 这里会打印实际的用户数据 }; fetchData();
方式2:用.then()处理Promise
getData().then(check => { console.log("check", check); // 这里会打印实际的用户数据 });
内容的提问来源于stack exchange,提问作者user19898771
相关产品推荐
相关产品推荐

