Este método se supone que devuelve una lista de usuarios, pero devuelve una matriz vacía. Cuando registro de consola dentro del bucle forEach, imprime los datos, pero no fuera de él.

  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
  }

En Home.js, lo llamo aquí.

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

Matriz [] es el registro de consola del método y los objetos son el registro de consola del bucle forEach.

enter image description here

0
CLUTCHER 4 nov. 2019 a las 11:42

1 respuesta

La mejor respuesta

Tienes una matriz vacía, porque tu función es síncrona y firebase devuelve una promesa que es asíncrona. Por eso, en la mayoría de los casos, primero obtendrá una matriz vacía y luego esa respuesta de firebase.

Prueba éste:

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

Y luego en Home.js

componentDidMount() {
    fireStoreDB.getAllUsers().then(list => console.log(list));
  }
3
cccn 4 nov. 2019 a las 09:59