推送在Firebase侦听器内部不起作用

时间:2018-10-30 13:54:49

标签: javascript firebase google-cloud-firestore

var db=firebase.firestore();
var musicidarray=[];
var musicpaircontentarray=[];

//Retreive all music value pairs
db.collection("MusicIdNamePairs").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        musicidarray.push(doc.id);
        musicpaircontentarray.push(doc);
        //alert(doc.get("Name"));
        //console.log(`${doc.id} => ${doc.data()}`);
    });
});
alert(musicidarray.length);//Suprisingly outputs length as zero even when the previou loop has run
for(var i=0;i<musicpaircontentarray.length;i++)
{
    alert(musicpaircontentarray[i].get("Name"));
}

此处musicidarraymusicpaircontentarray(存储从Cloud Firestore获得的文档参考)显示的长度为零,即使它已在上一段代码中的foreach循环内执行了push操作。这里有什么问题。请帮助我。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

<script>
        var db=firebase.firestore();
        var musicidarray=[];
        var musicpaircontentarray=[];

        //Retreive all music value pairs
        db.collection("MusicIdNamePairs").get().then((querySnapshot) => {
            querySnapshot.forEach((doc) => {
                musicidarray.push(doc.id);
                musicpaircontentarray.push(doc);
                //alert(doc.get("Name"));
                //console.log(`${doc.id} => ${doc.data()}`);
            });
            displayarray();
        });
        function displayarray()
        {
            alert(musicidarray.length);
            for(var i=0;i<musicpaircontentarray.length;i++)
            {
                alert(musicpaircontentarray[i].get("Name"));
            }
        }
    </script>

据我所知,这里的问题是即使在从数据库中检索数据之前,也会调用array.length(即使内容在脚本循环之后,并且看起来好像是仅在调用之后才调用length)循环执行)。相反,请确保在整个循环中都按照解决方案中的说明调用display数组方法。

希望这是正确的方法。如果我在某个地方错了,请纠正我。