【问题标题】:can I get some documents from firestore simultaneously using Promise.all?我可以使用 Promise.all 同时从 firestore 获取一些文件吗?
【发布时间】:2020-12-04 02:23:09
【问题描述】:

我想从 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 获得的文件?

【问题讨论】:

  • 是的,你可以,但是你会得到一个 array,它本身没有 docs 属性。

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


【解决方案1】:

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

由于Promise.all()“返回一个单一的承诺,它解析为输入承诺的结果数组”,latestEventDataSnapshot 是一个QuerySnapshots 的数组,你需要循环它,例如如下:

    const latestEventDataSnapshot = await Promise.all(promises)

    latestEventDataSnapshot.forEach(querySnapshot => {

        querySnapshot.docs.forEach(queryDocumentSnapshot => {

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

        })

    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2019-10-17
    相关资源
    最近更新 更多