Пожарная служба Firebase и облачные функции - QuerySnapshot не возвращается из Promise.all () - PullRequest
0 голосов
/ 26 июня 2018

Учитывая следующий код:

return admin.firestore()
    .collection("names")
    .get()
    .then(snapshot => {
        var results = [];
        snapshot.docs.forEach(doc => {
            results.push(doc.id);
        })

        var promises = [];
        results.forEach(function(id){
            promises.push(admin.firestore().doc(`players/${id}`).get());
        }); 

        return Promise.all(promises);
    }).then(players => {
        players.forEach(doc => {
            console.log(doc.data().name);
        });
        return players.docs.length; // undefined
    }).catch(error => {
        console.log(error);
    });

Почему players не является QuerySnapshot?Итерирование массива players работает, и doc.data().name печатает, как и ожидалось, но docs не является свойством players, что указывает на то, что players не является QuerySnapshot.Как решить эту проблему?

1 Ответ

0 голосов
/ 26 июня 2018

players - это массив успешных результатов, полученных из массива обещаний, которые вы передали Promise.all().Каждый элемент этого массива будет DocumentSnapshot объектом, полученным из обещания, возвращенного get () .Вы правильно итерируете его с forEach, чтобы захватить каждый DocumentSnapshot, и вызываете data () для каждого снимка, чтобы получить его необработанное значение javascript.Но здесь нет объектов QuerySnapshot , так как вы фактически не выполняли никаких запросов (получает только один документ, который на самом деле не является запросом).

Итог: кодplayers.docs.length предполагает, что массив обещаний в players - это то, чем он не является.

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