[英]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.