Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法访问集合存储中的文档_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 无法访问集合存储中的文档

Javascript 无法访问集合存储中的文档,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有一个来自firestore所有类别的对象数组 let docID = getStoreID(); let all_categories = []; db .collection("STORES") .doc(docID) .collection("CATEGORIES") .orderBy("CAT_ADDED_ON","desc")

我有一个来自firestore
所有类别的对象数组

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(所有类别)
时,它显示它有两个对象,但当我尝试遍历它们时,它显示
undefined

像这样:

all_categories.forEach(category => {
  console.log(category)
})
控制台不打印任何内容

有什么问题吗?

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

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)
            })
          })
    })

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

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)
            })
          })
    })

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

 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) })
  })

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

 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) })
  })

您当时或之后在何处使用console.log?如果您在外部使用,则获取数据需要一些时间,然后它将不会打印任何内容。这个`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)})`谢谢,你可以在答案中写下这段代码,我会接受答案。当然,谢谢,我会在答案中写出来。你当时是在内部使用console.log还是在之后使用console.log?如果你在外部使用,则需要一段时间来获取数据,它不会打印任何内容。这个`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(categority)})`谢谢,你可以在答案中写下这段代码,我会接受答案。当然,谢谢,我会在答案中写