如何在地图功能中从 Firestore 获取数据
2019-02-09
2116
我想通过对象映射来查看用户是否在线,从而从 Firestore 中检索数据。我不确定如何检索数据。
当我 console.log userInLobby 时(如下所示),我得到了 [Promise] 数组。
如果我尝试在 firebase 调用之前设置变量,则无法更改 .then() 函数内的变量
const userInLobby = users ? (
users.map(userdata => {
if (userdata.status === "online") {
var user =
firebase.firestore().collection("users").doc(userdata.id).get().then(user => {
return { username: user.data().username };
})
return user
}
else {
return null;
}
})
) : (null);
我如何访问 [Promise] 或是否有其他方法来构造此代码?
1个回答
您似乎正尝试在 map 函数内运行异步函数 (
firebase.firestore().collection("users").doc(userdata.id).get()
)。
这行不通。map 函数只会返回一个承诺数组。
您需要做的是使用 Promise.all() 在所有承诺返回时获取结果。
const userInLobby = users
&& users.map(userdata => {
if (userdata.status === 'online') {
return firebase
.firestore()
.collection('users')
.doc(userdata.id)
.get()
}
})
Promise.all(userInLobby).then(values => console.log(values))
Josh Pittman
2019-02-09