如何处理Firestore查询无匹配数据时的返回结果?
解决Firestore查询无结果时返回指定值的问题
问题分析
你当前的代码存在两个关键问题:
forEach方法的返回值始终是undefined,不管你在回调里return什么,所以函数最终返回的不是你期望的文档数据或false- 当查询无匹配文档时,
forEach的回调根本不会执行,也就不会触发else分支的逻辑
Firestore的QuerySnapshot对象本身自带empty属性,可以直接判断查询结果是否为空,再结合uid的唯一性(用户ID通常唯一),我们可以简化逻辑。
修复后的代码
async function getUserData(uid) { const usersRef = collection(db, "users"); const q = query(usersRef, where("uid", "==", uid)); const querySnapshot = await getDocs(q); // 判断查询结果是否为空 if (querySnapshot.empty) { return false; // 或者返回null,根据你的需求选择 } // 因为uid唯一,直接取第一个文档的数据 return querySnapshot.docs[0].data(); }
代码说明
querySnapshot.empty:Firestore提供的属性,当查询结果没有文档时返回true,此时直接返回你需要的false或null- 由于用户的uid是唯一标识,查询结果最多只会有一个文档,所以直接通过
querySnapshot.docs[0]获取第一个匹配的文档,再调用data()返回用户数据 - 这样修改后,函数在有匹配用户时返回用户数据,无匹配时返回
false(或null),完全符合你在if语句中判断是否需要创建用户档案的需求
内容的提问来源于stack exchange,提问作者masafood
相关产品推荐
相关产品推荐

