Как получить данные из Firestore в функции карты - PullRequest
0 голосов
/ 09 февраля 2019

Я хочу получить данные из 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 Ответ

0 голосов
/ 09 февраля 2019

Похоже, вы пытаетесь запустить асинхронную функцию (firebase.firestore().collection("users").doc(userdata.id).get()) внутри функции карты.

Это не сработает.Функция карты просто вернет массив обещаний.

Вам нужно использовать 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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...