Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从firebase firestore引用获取异步值_Javascript_Typescript_Firebase_Promise_Google Cloud Firestore - Fatal编程技术网

Javascript 从firebase firestore引用获取异步值

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

我正在尝试从firebase firestore数据库获取此承诺的名称值:

(至于信息,我有一个places collection,其中place包含一个名称,ownerReference引用一个仅包含名称的所有者文档。)


第一个控制台日志返回所需的数据,最后一个控制台日志返回一个空对象,我知道这是由于承诺的异步性质造成的,但是我如何才能获得分配给此变量的所需值?

将每个
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很好