从Firebase Firestore参考获取异步值

时间:2018-06-27 19:04:42

标签: javascript typescript firebase promise google-cloud-firestore

我正在尝试从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的异步性质而发生的,但是我如何获得分配给该变量的所需值呢?

1 个答案:

答案 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
})