Сбор данных из пожарной части Firebase в ответных собственных возвратах, неопределенных вне обещания - PullRequest
0 голосов
/ 04 ноября 2019

Предполагается, что этот метод возвращает список пользователей, но возвращает пустой массив. Когда я консольный журнал внутри цикла forEach, он печатает данные, но не за ее пределами.

  get getAllUsers() {
    const usersList = [];
    firebase
      .firestore()
      .collection('users')
      .get()
      .then(snapshot => {
        snapshot.forEach(user => {
          usersList.push(user.data());
          console.log(user.data());
        });
      });
    return usersList; // Array [] or undefined when indexed
  }

На Home.js, я называю это здесь.

  componentDidMount() {
    const list = fireStoreDB.getAllUsers;
    console.log(list);
  }

Array []это консольный журнал метода, а объекты - консольный журнал из цикла forEach.

enter image description here

1 Ответ

3 голосов
/ 04 ноября 2019

У вас есть пустой массив, потому что ваша функция является синхронной, а firebase возвращает обещание, которое является асинхронным. Вот почему в большинстве случаев вы сначала получите пустой массив, а затем ответ от firebase.

Попробуйте это:

 async getAllUsers() {
   const usersList = await firebase
      .firestore()
      .collection('users')
      .get()
      .then(snapshot => {
        return snapshot.map(user => user.data(););
      });
    return usersList;
  }

А затем в Home.js

componentDidMount() {
    fireStoreDB.getAllUsers().then(list => console.log(list));
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...