我应该为一个移动用户访问一个称为“关注者”的子集合,其中包含关注者的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
})
}
答案 0 :(得分:1)
mobileUserRef.doc(follower.id).get()
是异步的,并以承诺立即返回。 forEach循环在移动到列表中的快照之前不会等待该承诺解决。您应该将那个诺言推送到一个数组中,然后在该数组上使用Promise.all
以等待所有获取完成之后再继续。然后,您将必须迭代每个结果,并将它们推入另一个数组以提供给调用方。
另请参阅: