Firebase Function读取Cloud Firestore数据时forEach报错求助
问题根源
你调用db.collection("userToken").doc(userId).get()获取的是单个文档快照(DocumentSnapshot),而非包含多个文档的查询快照(QuerySnapshot)。单个文档对象没有forEach方法,这就是报错“for each is not a valid function”的原因。
另外你第一段代码混用了await和then,且then返回null,导致第二段代码里的userNotificationTokenDocs是null,调用forEach也会报错。
解决方案
根据你的实际数据结构选择对应方案:
方案1:用户文档中存储令牌数组
如果userToken集合里,每个用户ID对应的文档包含一个Tokens数组字段(存储该用户的所有通知令牌),直接读取数组即可:
let tokenList = []; // 获取单个用户文档 const userDoc = await db.collection("userToken").doc(userId).get(); if (userDoc.exists) { // 提取令牌数组,为空时默认赋值空数组 tokenList = userDoc.data().Tokens || []; } // 传入SendtoDevice函数 SendtoDevice(tokenList);
方案2:每个令牌是独立文档
如果userToken集合中,每个文档对应一个通知令牌(文档包含Token字段和关联的userId),需要用查询获取该用户的所有令牌文档:
let tokenList = []; // 查询该用户的所有令牌文档 const querySnapshot = await db.collection("userToken").where("userId", "==", userId).get(); querySnapshot.forEach(doc => { const token = doc.data().Token; // 过滤空令牌 if (token) { tokenList.push(token); } }); // 传入SendtoDevice函数 SendtoDevice(tokenList);
内容的提问来源于stack exchange,提问作者fazilSizzlers
相关产品推荐
相关产品推荐

