Push не работает внутри firebase слушателя - PullRequest
0 голосов
/ 30 октября 2018
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"));
}

Здесь musicidarray и musicpaircontentarray (хранящие ссылку на документ, полученную из Cloud Firestore) показывают длину как ноль, даже после того, как он выполнил операцию push внутри цикла foreach в предыдущем блоке кода. Что не так здесь. Пожалуйста, помогите мне. Большое спасибо за помощь.

1 Ответ

0 голосов
/ 30 октября 2018
<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 вызывается еще до того, как данные извлекаются из базы данных (даже если содержимое находится после цикла в скрипте и выглядит так, как будто длина вызывается только после цикл выполняется). Вместо этого вызовите метод массива отображения после того, как весь цикл будет гарантированно завершен, как в решении.

Надеюсь, что это правильный путь. Если я где-то ошибаюсь, поправьте меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...