给出以下代码:
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} }。如何解决这个问题?
答案 0 :(得分:0)
players
是从您传递给Promise.all()
的诺言中获得的一系列成功结果。该数组的每个元素都将是一个DocumentSnapshot对象,该对象是由get()返回的promise获得的。您正确地使用forEach
对其进行了迭代,以获取每个DocumentSnapshot的所有权,并在每个快照上调用data(),以获取其原始javascript值。但是这里没有QuerySnapshot对象在起作用,因为您实际上没有执行任何查询(只有单文档获取,实际上不是查询)。
底线:代码players.docs.length
假设players
中的promise数组不是。