Javascript 从firebase firestore引用获取异步值
我正在尝试从firebase firestore数据库获取此承诺的名称值: (至于信息,我有一个places collection,其中place包含一个名称,ownerReference引用一个仅包含名称的所有者文档。)Javascript 从firebase firestore引用获取异步值,javascript,typescript,firebase,promise,google-cloud-firestore,Javascript,Typescript,Firebase,Promise,Google Cloud Firestore,我正在尝试从firebase firestore数据库获取此承诺的名称值: (至于信息,我有一个places collection,其中place包含一个名称,ownerReference引用一个仅包含名称的所有者文档。) 第一个控制台日志返回所需的数据,最后一个控制台日志返回一个空对象,我知道这是由于承诺的异步性质造成的,但是我如何才能获得分配给此变量的所需值?将每个get()的所有承诺收集到一个数组中,然后使用promise.all()等到他们全部完成。然后在回调中迭代生成的快照 const
第一个控制台日志返回所需的数据,最后一个控制台日志返回一个空对象,我知道这是由于承诺的异步性质造成的,但是我如何才能获得分配给此变量的所需值?将每个
get()
的所有承诺收集到一个数组中,然后使用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
})
将每个
get()
中的所有承诺收集到一个数组中,然后使用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
})
使用数组更容易。map@JonasW. 当然,但是OP没有使用它,所以我不想把这个问题混为一谈。得到这个错误:此行的类型“{}”上不存在属性“data”
names.push(snapshot.data().name)
Nevermind,这是一个类型脚本问题(没有指定快照上的类型),所以这个答案无疑是正确的,谢谢lot@GustavoFreire是的,完全是打字脚本d.ts很好的捕捉方式,更容易使用数组。map@JonasW. 当然,但是OP没有使用它,所以我不想把这个问题混为一谈。得到这个错误:此行的类型“{}”上不存在属性“data”names.push(snapshot.data().name)
Nevermind,这是一个类型脚本问题(没有指定快照上的类型),所以这个答案无疑是正确的,谢谢lot@GustavoFreire是的,正是打字脚本d.T很好