Firestore读取文档报docSnap.exists非函数及await语法错误求助
问题核心原因
两个报错本质是同一个根因导致的:await 关键字的使用规则错误
- 第一个语法报错:
await只能在标记了async的函数内部使用,你当前的表单提交事件回调是普通函数,没有加async修饰,直接写await会被识别为非法的保留字使用。 - 第二个类型报错:你去掉
await之后,getDoc方法返回的是未完成状态的 Promise 实例,而非文档快照对象,Promise 本身不存在exists方法,因此触发报错。
修复方案
只需要给表单提交的回调函数加上 async 修饰符即可,修复后的代码如下:
requestForm.addEventListener('submit', async (event) => { event.preventDefault(); const user = auth.currentUser; // 先判断用户登录状态,避免user为null时读取email报错 if (!user) { console.log("用户未登录"); return; } const docSnap = await getDoc(doc(db, "users", user.email)); if (docSnap.exists()) { console.log("Document data:", docSnap.data()); } else { console.log("No such document!"); } })
额外注意
如果后续依然出现读取异常,可以先打印 user.email 的值确认是否和Firestore中users集合的文档ID完全匹配,邮箱的大小写、前后空格都会导致匹配不到文档。
内容的提问来源于stack exchange,提问作者Mount Vesubio
相关产品推荐
相关产品推荐

