JavaScript Array的这种行为是什么?

时间:2019-10-23 17:41:46

标签: javascript arrays google-cloud-firestore

我已经开始使用JavaScript / Firestore了几天,但是我在数组中使用laguage的行为面临一些问题。我无法在函数内使用for循环来运行数组,并且几乎所有时间都无法返回未定义状态。这是我的代码:

这是将会议处于活跃状态的Firestore上的所有ID取回的代码:

   function validation () {

      let path = firebase.firestore()
      path
        .collection('database')
        .doc('405')
        .collection('meetings')
        .where('active', '==', true)
        .get().then( snapshot =>{
        snapshot.docs.forEach( snapshot => {        
        this.id_firestore.push(snapshot.id)
        })

      }) 

    },

这是在 id_firestore 数组上运行所有id并在firestore上处理会议所有疑问的代码:

    function search_doubts (){
      let data = this.id_firestore  // in this line data.value = ["QEq1VexdC28BbWRvSFL7","vFsSdDeHJqJQU13dwMwQ"]
      let path = firebase.firestore().collection('database').doc('405').collection('meeting')

      console.log(data)    //  here it logs me all the array normally
      console.log(data[0]) // here the log returns me undefined

      for (let i = 0; i<data.lenght; i++) {        
        path.doc(data[i]).collection('doubts').get().then( snapshot =>{
          snapshot.docs.forEach( snapshot => {        
            this.doubts.push(snapshot.data().txt_doubts)
            this.id_firestore_doubts.push(snapshot.id)        
          })
          console.log(data[1]) //here it logs me the data normally
        })         
      }
    }

我进行了太多搜索,但是我没有找到有关此行为的任何信息,有人可以回答为什么该功能具有这种行为吗? 这是我的调试器上的chrome控制台结果:

Console.log(数据):

[__ob__: Observer]
0: "QEq1VexdC28BbWRvSFL7"
1: "vFsSdDeHJqJQU13dwMwQ"
length: 2
__ob__: Observer {value: Array(2), dep: Dep, vmCount: 0}
__proto__: Array

Console.log(数据[0]):

undefined

Console.log(data [1])

vFsSdDeHJqJQU13dwMwQ

1 个答案:

答案 0 :(得分:0)

找到了答案。我是在vue环境中完成此功能的,因为该变量在表下运行观察者标准。我只需要创建一个内部var并在其中运行其他函数即可:

   function validation () {
      let id_firestore = []
      let path = firebase.firestore()
      path
        .collection('database')
        .doc('405')
        .collection('meetings')
        .where('active', '==', true)
        .get().then( snapshot =>{
        snapshot.docs.forEach( snapshot => {        
        this.id_firestore.push(snapshot.id)
        })
       this.search_doubts (id_firestore)
      }) 

    },

谢谢您的帮助!