创建Firestore对象数组时出现问题

时间:2018-12-17 02:28:36

标签: javascript firebase google-cloud-firestore

使用以下代码似乎没有任何内容存储在数组中:

(假设showList是一个实际的div ID;认为没有必要在代码中包含这些标签)

 var i = 0;
 var array = [];
 var showList = document.getElementById('showList');

firebase.firestore().collection('TV Shows').get().then(snapshot => {

    snapshot.forEach(doc => {

        array[i] = doc.data().show.name;
        i++;
        //console.log(doc.data().show.name);

    });

}); 

showList.innerHTML = array[4];

很有趣,console.log注释行可以正常工作并显示所有对象,所以我不明白为什么不能将其存储在数组中。我的很大一部分感觉就像是使用数组和/或i变量的方向,但我将其标记为Firebase / firestore问题,并且偶然地发现它是Firebase问题。

如果有人可以指出我的写作方向,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

.get()是asyncronyous,在您运行时:

showList.innerHTML = array[4];

array尚未初始化。

您要么需要使用链接重复项中提到的回调/承诺,要么只需将调用移至.then()函数内部即可:

 var showList = document.getElementById('showList');

firebase.firestore().collection('TV Shows').get().then(snapshot => {
    var array = [];
    var i = 0;

    snapshot.forEach(doc => {

        array[i] = doc.data().show.name;
        i++;
        //console.log(doc.data().show.name);

    });
    showList.innerHTML = array[4];

});