我想获取对象列表,对于每个对象,另一个集合中都有一条记录,也必须调用该记录。两个请求都返回 promise ,我的问题是,如何在完成下一个外部 promise 之前“等待”内部 promise 得到履行。
这是代码:
export async function getAllCompanies(req: Request, res: Response) {
try {
const listCompanies = await db.collection('companies').get()
const companies = listCompanies.docs.map(async doc => {
const data = doc.data()
const location = await db.collection('locations').doc(data.locationId).get()
const locationData = location.data()
return {
id: doc.id,
name: data.name,
address: locationData ? locationData.address : null,
zipCode: locationData ? locationData.zipCode : null,
city: locationData ? locationData.city : null,
country: locationData ? locationData.country : null,
email: data.email,
phoneNumber: data.phoneNumber,
type: data.type,
createTime: doc.createTime.toDate(),
lastUpdateTime: data.lastUpdateTime
}
})
return res.status(200).send({ companies })
} catch (err) {
return handleError(res, err)
}
}
最佳答案
我认为您正在寻找:
const resolvedCompanies = await Promise.all(companies);
return res.status(200).send({companies: resolvedCompanies});
就在返回res.status(...)
之前。这将等待您映射
到公司列表中的所有 promise 在返回之前解决,并返回值而不是 promise 。
关于javascript - 如何解决 Firebase 函数中的嵌套异步数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59395204/