Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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函数中的嵌套异步数据库调用_Javascript_Firebase_Function_Async Await_Google Cloud Firestore - Fatal编程技术网

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

Javascript 如何解决Firebase函数中的嵌套异步数据库调用,javascript,firebase,function,async-await,google-cloud-firestore,Javascript,Firebase,Function,Async Await,Google Cloud Firestore,我想得到一个对象列表,每个对象在另一个集合中都有一个记录,这个集合也必须被调用。这两个请求都会返回承诺,我的问题是,如何“等待”内在承诺在下一个外在承诺完成之前实现 代码如下: export async function getAllCompanies(req: Request, res: Response) { try { const listCompanies = await db.collection('companies').get() const

我想得到一个对象列表,每个对象在另一个集合中都有一个记录,这个集合也必须被调用。这两个请求都会返回承诺,我的问题是,如何“等待”内在承诺在下一个外在承诺完成之前实现

代码如下:

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(…)
之前。这将等待您映射到公司列表中的所有承诺得到解决,然后返回值而不是承诺。

我想您正在寻找:

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

就在
返回res.status(…)
之前。这将等待您
映射到公司列表中的所有承诺得到解决,然后返回值而不是承诺。

谢谢!正是我想要的。谢谢!正是我想要的。