我可以使用Promise.all同时从Firestore中获取一些文档吗?

时间:2020-08-14 07:47:48

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我想从Firestore获取一些文档。在我可调用的云函数中,我使用Promise.all而不是等待一个接一个地获取文档,而是一个接一个地等待文档,

        const promises = []

        upcomingEventIDs.forEach( upcomingEventIDs => {

            const p = db.collection("events")
            .where("eventID","==",upcomingEventIDs)
            .where("isActive","==",true)
            .where("hasBeenApproved","==",true)
            .where("isCancelled","==",false)
            .get()

            promises.push(p)
        })

        const latestEventDataSnapshot = await Promise.all(promises)

然后我要循环我刚得到的文档快照,这就是问题所在

    latestEventDataSnapshot.docs.forEach( doc => { // <-- error in this line

        

    })

我有一个错误

TypeError:无法读取未定义的属性“ forEach”

这里有什么问题?我应该怎么做才能从Firestore获得刚刚得到的文档?

1 个答案:

答案 0 :(得分:1)

get()方法返回一个以QuerySnapshot解析的Promise。

由于Promise.all()“返回了一个可解决输入promise结果数组的单个Promise”,因此latestEventDataSnapshot是一个QuerySnapshot s数组,您需要对其进行循环,例如:

    const latestEventDataSnapshot = await Promise.all(promises)

    latestEventDataSnapshot.forEach(querySnapshot => {

        querySnapshot.docs.forEach(queryDocumentSnapshot => {

            console.log(queryDocumentSnapshot.data());
            //...

        })

    })