无法访问集合Firestore中的文档



我有一个来自消防仓库all_categories的对象数组。

let docID = getStoreID();
let all_categories = [];
db
.collection("STORES")
.doc(docID)
.collection("CATEGORIES")
.orderBy("CAT_ADDED_ON","desc")
.limit(5).get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
all_categories.push(doc.data())
})
})

当我console.log(all_categories)时,它显示它有2个对象,但当我尝试遍历它们时,它会显示undefiened

像这样:

all_categories.forEach(category => {
console.log(category)
})

控制台不打印任何内容。

问题出在哪里?

从数据库中检索数据是一个异步过程,您可以像这样将另一个then附加到它上,当前一个完成时,它将运行后一个。

db.collection("STORES")
.doc(docID)
.collection("CATEGORIES")
.orderBy("CAT_ADDED_ON","desc")
.limit(5)
.get()
.then((querySnapshot) => { querySnapshot.forEach((doc) => { all_categories.push(doc.data())})
.then(()=>{ all_categories.forEach(category => { console.log(category) })
})

get()是异步的(返回一个Promise(,这意味着它将在完成之前转到另一个任务。then()方法返回一个Promise。它最多包含两个参数:Promise成功和失败情况的回调函数。因此,您必须执行以下操作才能访问category元素:

let docID = getStoreID();
let all_categories = [];
db
.collection("STORES")
.doc(docID)
.collection("CATEGORIES")
.orderBy("CAT_ADDED_ON","desc")
.limit(5).get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
all_categories.push(doc.data());
all_categories.forEach(category => {
console.log(category)
})
})
})

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

最新更新