使用以下代码似乎没有任何内容存储在数组中:
(假设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问题。
如果有人可以指出我的写作方向,我将不胜感激。
答案 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];
});