当我通过对象映射以查看用户是否在线时,我想从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]或还有另一种方式来构造此代码?
答案 0 :(得分:2)
您似乎正在尝试在map函数内部运行异步函数(firebase.firestore().collection("users").doc(userdata.id).get()
)。
那行不通。 map函数只会返回一个promise数组。
您需要做的就是在所有的诺言归还时使用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))