繁体   English   中英

为什么 for-each 有效,但 for...of... 无效?

[英]Why does for-each work, but for...of... doesn't?

这是我从 firebase 获取数据的代码:

const querySnapshot = await db.collection('entries').get()

我想将每个条目元素的数据添加到一个新数组中,为此我有两种方法:

querySnapshot.forEach((entry) => {
   const entryData = entry.data()
   entries.value.push(entryData)
})

for (const entry of querySnapshot) {
      const entryData = entry.data()
      if (entry) { entries.value.push(entryData)
}

第一个解决方案有效,但第二个引发此错误: TypeError: "querySnapshot is not iterable" 这两种方式不是基本一样吗? 为什么 on 会抛出错误,而另一个不会?

从 get 方法返回的querySnapshot不是数组或可迭代对象。

https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot

forEach是 querySnapshot object 中的一个方法,这就是您可以使用它的原因。

他们不一样。 第一个 when 仅仅意味着您的 object 有一个forEach方法。

第二个意味着您的 object 有一个[Symbol.iterator]属性,它是一个生成器。 这使您的 object 可迭代。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator

正如 Alberto Rivera 所说,forEach 是一种 QuerySnaphot 方法,它可以为您完成工作。 但是您可以使用以下方法自己循环这些文档:

    const entries = await db.collection('entries').get();
    for (entry of entries.docs) {
        console.log(entry.id);
    }

请注意,“.docs”随您的查询快照一起提供,并且它是可迭代的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM