Как получить данные из Firestore в функции карты

Я хочу получить данные из 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] или есть другой способ структурировать этот код?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 728
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы пытаетесь запустить асинхронную функцию (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))

Другие вопросы по теме