【问题标题】:Unexpected token db Firestore Function Issue意外的令牌数据库 Firestore 功能问题
【发布时间】:2020-09-08 05:09:37
【问题描述】:

我现在遇到了这个问题:

解析错误:意外的令牌数据库。它在 getMember 行标记。 这行代码我以前用过,没问题。代码如下:

                    clubMemCheck.forEach(doc => {

                        if (doc.data().dropletUserId) {
                            let addUserId = doc.data().dropletUserId
                            let getMember = await db.collection('users').doc(addUserId).get()

                            var userIdM = getMember.data().userId
                            var phone = getMember.data().phone
                            var avatar = getMember.data().avatar
                            var firstName = getMember.data().firstName
                            var lastName = getMember.data().lastName
                            var screenName = getMember.data().screenName

                            var userItem = {userId: userIdM, phone: phone, avatar: avatar, firstName: firstName, lastName: lastName, screenName: screenName}
                            clubContacts.push(userItem)
                        }

                    });

编辑:当我取出“等待”时似乎没问题,但这可能会使它下面的值返回为空。

【问题讨论】:

    标签: javascript google-cloud-firestore async-await google-cloud-functions


    【解决方案1】:

    您的代码试图在尚未声明为async 的函数中使用await。这里的函数是您传递给 forEach 的内部匿名函数。如果 async 在更高的范围内,则不适用 - await 只能在它出现的最里面的函数中使用。

    如果您想在 forEach 循环中使用 await,有一些资源可以提供一些替代方案:

    或者,如果您可以将 forEach 转换为 for 循环,则将消除传递给 forEach 的内部函数。

    【讨论】:

    • 感谢您的回复。我将其更改为 clubMemCheck.forEach(async doc => { 并且 await 开始工作,但有时它返回 0 条记录,有时它包含 1 条记录。那里有 defo 1。所以不确定发生了什么。
    • 对,你不能只把 await 放在内部函数上。我提供的链接解释了为什么这不能按您期望的方式工作。 forEach 循环不会“等待”内部等待完成。它只会遍历 async 函数返回的所有 Promise。考虑使用链接答案的建议将所有承诺收集到一个数组中,并使用 Promise.all() 等待它们。
    猜你喜欢
    • 2021-08-11
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2019-03-29
    • 2022-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多