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

时间:2019-04-18 16:06:28

标签: javascript firebase google-cloud-firestore

我应该为一个移动用户访问一个称为“关注者”的子集合,其中包含关注者的ID。 使用此ID,我应该从mobile_user集合中获取有关关注者的数据,并将其添加到数组中。 我可以成功遍历文档列表,但是当使用push时,似乎无法从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 
    })
  }

1 个答案:

答案 0 :(得分:1)

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

另请参阅: