首页 > 解决方案 > 如何解决 Firebase 函数中的嵌套异步数据库调用

问题描述

我想获取一个对象列表,对于每个对象,另一个集合中都有一条记录,也必须调用它。两个请求都返回承诺,我的问题是,如何在下一个外部承诺完成之前“等待”内部承诺得到履行。

这是代码:

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

标签: javascriptfirebasefunctionasync-awaitgoogle-cloud-firestore

解决方案


我想你正在寻找:

const resolvedCompanies = await Promise.all(companies);
return res.status(200).send({companies: resolvedCompanies});

就在return res.status(...). 这将等待您map在公司列表中解决的所有承诺,然后再返回并返回值而不是承诺。


推荐阅读