我应该为移动用户访问一个名为“关注者”的子集合,其中包含关注者的 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/