You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:05:12