Firebase Get调用结构错误,无法遍历返回数据求助
问题分析与解决
你的问题出在Firebase get() 方法的使用错误,混淆了单次获取数据的get()和实时监听的onValue()的API用法,导致individualVisitor实际是Firebase的Snapshot对象而非你需要的解析后数据。
错误根源
你写的getVisitors函数里,get(dbRef, (snapshot) => { ... })是错误的——get()方法不接受第二个回调参数,它返回的是一个Promise,而非通过回调返回数据。你在回调里return visitor根本不会被外部接收到,await getVisitors(...)最终拿到的是Firebase的Snapshot实例,而非解析后的用户数据。
浏览器控制台会自动展开Snapshot的val()内容,让你误以为拿到了正确的对象,但实际变量是Snapshot本身,所以Object.keys(individualVisitor)会遍历出Snapshot自身的属性(_node、ref等)。
修正步骤
1. 修复getVisitors函数
正确处理get()返回的Promise,直接返回解析后的访客数据:
const getVisitors = async (uid) => { const dbRef = ref(db, `organization/${org}/visitors/${uid}`); const snapshot = await get(dbRef); return snapshot.val(); }
或者用.then()的写法:
const getVisitors = (uid) => { const dbRef = ref(db, `organization/${org}/visitors/${uid}`); return get(dbRef).then(snapshot => snapshot.val()); }
2. (可选)处理map中的异步Promise数组
Object.keys(...).map(async ...)会返回一个Promise数组,如果需要等待所有请求完成后再执行后续逻辑,记得用Promise.all包裹:
await Promise.all(Object.keys(resultData.visitors[item]).map(async visitorEl => { const visitorObj = {}; const individualVisitor = await getVisitors(visitorEl); console.log(individualVisitor); Object.keys(individualVisitor).forEach(el => { console.log(el); }) }));
验证效果
修正后,individualVisitor会是你期望的访客对象,Object.keys就能正确遍历出address、first等属性键了。
内容的提问来源于stack exchange,提问作者FabricioG
相关产品推荐
相关产品推荐

