Я хочу получить данные из Firestore, когда я сопоставляю объект, чтобы увидеть, находится ли пользователь в сети. Я не уверен, как получить данные.
Когда я запускаю console.info 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] или есть другой способ структурировать этот код?





Похоже, вы пытаетесь запустить асинхронную функцию (firebase.firestore().collection("users").doc(userdata.id).get()) внутри функции карты.
Это не сработает. Функция карты просто вернет массив обещаний.
Что вам нужно сделать, так это использовать Обещание.все(), чтобы получить результат, когда все промисы вернутся.
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.info(values))