【发布时间】:2021-02-05 00:55:29
【问题描述】:
我正在使用 firebase admin SDK 服务器端,并且在我的一条路线中,我获取了一个集合,然后循环遍历所述集合中的每个文档...在每次迭代期间,我使用一个属性值来执行第二次得到()。在第二次 get() 的 then() 中,我再次使用初始 get 中的数据来制作最终的第三次 get()。
不幸的是,这些嵌套调用的异步特性似乎会产生不良结果。
这里是路由函数:
router.get('/list', authorization, (req, res) => {
console.log('/reports/list entered...')
admin
.firestore()
.collection('user-reports')
.get()
.then(querySnapshot => {
const reports = []
querySnapshot.forEach(snapshotDocument => {
const closed = snapshotDocument.get('closed')
console.log(`closed status: ${closed}`)
if (closed === false) {
const data = snapshotDocument.data()
console.log(`condition passed, data: ${JSON.stringify(data)}`)
// get # of reports made by sender
admin
.firestore()
.collection('users')
.doc(data.reportee)
.get()
.then(doc => {
data['reportee'] = {
reportActivity: doc.get('reportActivity')
}
console.log(`first then => data; ${JSON.stringify(data)}`)
// get report history of reportee
admin
.firestore()
.collection('users')
.doc(data.reporter)
.get()
.then(doc => {
data['reporter'] = {
reportActivity: doc.get('reportActivity')
}
console.log(`second then, ${JSON.stringify(data)}`)
reports.push(data)
})
.catch(err => {
return res.json({ error: true, message: err })
})
})
.catch(err => {
return res.json({ error: true, message: err })
})
}
})
console.log(`pre-response: ${JSON.stringify(reports)}`)
return res.json({ reports })
})
.catch(err => res.json({ error: true, message: err }))
})
即时记录的是“第一个条件通过”、“预响应:[]”和“首先然后 => 数据”。当我最终返回“报告”时,它是空的。有没有更有效的方法在 foreach 循环中运行 firestore 方法?
【问题讨论】:
标签: reactjs firebase google-cloud-firestore