首页 > 解决方案 > 对象不支持属性或方法'forEach

问题描述

我尝试从 Firestore 上的 Firestore 获取数据,但它返回此对象没有 foreach 方法。我还尝试在下面的控制台语句中进行控制台:console.log("this")不起作用,但另一个 console.log 起作用。这是代码:

let fstore = firebase.firestore();
fStore
  .collection('user-info')
  .doc(userID)
  .get()
  .then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      if (doc.id != userID) {
        // doc.data() is never undefined for query doc snapshots
        user_list2.push(doc.data());
        console.log('this');
      }
    });
  });

fStore
  .collection('User')
  .get()
  .then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      if (doc.id != userID) {
        // doc.data() is never undefined for query doc snapshots
        user_list.push(doc.data());
        console.log(user_list);
        console.log(user_list.length);
      }
    });
  });

标签: javascriptgoogle-cloud-firestore

解决方案


fStore.collection("user-info").doc(userID).get()不会产生 QuerySnapshot。它会生成一个 DocumentSnapshot,因为它只能返回一个文档 - 您在doc(). DocumentSnapshot 没有 forEach 方法,因为没有什么可迭代的。

相反,您应该只在获得的对象上调用 data() :

fStore
  .collection('user-info')
  .doc(userID)
  .get()
  .then(function (snapshot) {
    const data = snapshot.data();
  })

您的第二个查询可以返回多个文档,因为它要求集合中的每个文档,因此您会得到一个 QuerySnapshot intead。

这里的底线是get()DocumentReference 只能返回一个文档,而get()CollecitonReference 或 Query 可以返回多个文档。它们是具有不同结果的不同类型的查询。


推荐阅读