Firebase Firestore和云功能-Promise.all()不返回QuerySnapshot

时间:2018-06-25 23:36:44

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

给出以下代码:

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不是{{1} }。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

players是从您传递给Promise.all()的诺言中获得的一系列成功结果。该数组的每个元素都将是一个DocumentSnapshot对象,该对象是由get()返回的promise获得的。您正确地使用forEach对其进行了迭代,以获取每个DocumentSnapshot的所有权,并在每个快照上调用data(),以获取其原始javascript值。但是这里没有QuerySnapshot对象在起作用,因为您实际上没有执行任何查询(只有单文档获取,实际上不是查询)。

底线:代码players.docs.length假设players中的promise数组不是。