我正在尝试从Firebase Firestore数据库中获取此诺言的名称值:
(关于信息,我有一个场所集合,该场所具有一个包含名称的场所和一个ownerReference,该引用引用仅包含名称的所有者文档。)
var names: any = [];
this.props.places.snapshot.docs.forEach((doc : any) => {
const place = doc.data()
place.ownerReference.get().then((snap : any) => {
name.push(snap.data().name);
console.log(names);
})
});
console.log(names);
第一个控制台日志返回所需的数据,最后一个返回空对象,我知道这是由于promise的异步性质而发生的,但是我如何获得分配给该变量的所需值呢?
答案 0 :(得分:1)
将每个get()
中的所有promise收集到一个数组中,然后使用Promise.all()等待它们全部完成。之后,在回调中迭代生成的快照。
const promises = []
this.props.places.snapshot.docs.forEach((doc : any) => {
const place = doc.data()
promises.push(place.ownerReference.get())
})
Promise.all(promises).then(snapshots => {
const names = []
snapshots.forEach(snapshot => {
names.push(snapshot.data().name)
})
console.log(names); // this prints what you want
})