javascript - 将元素添加到数组,然后在 forEach 循环后返回值

标签 javascript firebase google-cloud-firestore

我应该为移动用户访问一个名为“关注者”的子集合,其中包含关注者的 ID。 使用此 ID,我应该从 mobile_user 集合中获取有关关注者的数据并将其添加到数组中。 我可以成功地遍历文档列表,但是当使用推送时,我似乎无法从 for 循环中返回完整的数据列表。

看看我当前的代码:

注意两个控制台日志,在第一个控制台日志上,我可以看到数组填充了我想要的信息,在第二个控制台日志上,数组返回为空。我肯定缺少从 for 循环返回数组所需的任何内容。 我对 js 相当陌生,任何正确方向的建议将不胜感激。

const getFollowers = (data, context) => { 
    let id = data.id 
    const mobileUserRef = db.collection('mobile_user')

    return mobileUserRef.doc(id).collection('followers')
    .get()
    .then(function(doc) { 
        var result = []
         doc.forEach(function(follower) { 
            mobileUserRef.doc(follower.id).get()
            .then(function(followerdoc) { 
                result.push({
                    name: followerdoc.data().name
                })
                console.log(result)
            })
        })
        console.log(result)
        return result 
    })
  }

最佳答案

mobileUserRef.doc(follower.id).get() 是异步的,并立即返回并带有一个 promise 。 forEach 循环在移动到列表中的快照之前不会等待该 promise 解决。您应该将该 Promise 插入一个数组,然后在该数组上使用 Promise.all 等待所有获取完成,然后再继续。然后,您必须迭代每个结果并将它们推送到另一个数组中以提供给调用者。

另请参阅:

关于javascript - 将元素添加到数组,然后在 forEach 循环后返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55749921/

相关文章:

javascript - 使用 openlayer 无法显示 map

Javascript多图像颜色变化

ios - 如何使用 Firebase 获取通知响应数据?

javascript - 使用 Node.js 和 Firebase/Firestore 创建 Web 应用程序

android - Firestore:脱机时事务崩溃

javascript - 如何在悬停或激活时更改元素的文本?

javascript - Visual Studio 和 Chrome 的 let 和 const 问题

javascript - Quasar 2.2.2、Vue 3 和 Firebase : how to access GlobalProperties from router

javascript - Firebase 和 JavaScript - 如何更新具有特定 ID 值的对象?

android - 如何在更新字段值时触发 firestore 云功能?