javascript - 如何解决 Firebase 函数中的嵌套异步数据库调用

标签 javascript firebase function async-await google-cloud-firestore

我想获取对象列表,对于每个对象,另一个集合中都有一条记录,也必须调用该记录。两个请求都返回 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/

相关文章:

Javascript - 图像数据处理和div渲染

javascript - 将过滤器选择器变量传递给另一个函数

javascript - 如何在 firebase web 中获取新添加的子项?

javascript - 如何使用 Firebase SDK v9(模块化)在 Firebase 实时数据库中读取、写入和查询数据

c++ - 我可以用传递给 C++ 函数的形式参数创建 union 吗?

c - 删除字符串中的所有重复字符 - c

javascript - 使用 lodash 递归收集属性值

Javascript检查对象属性是否存在,即使对象未定义

javascript - 自定义 JQuery UI 对话框的正确方法

javascript - 如何从 Firebase 存储获取 React.js 的异步图像数据?