Cette méthode est censée renvoyer une liste d'utilisateurs mais renvoyant un tableau vide. Lorsque je console le journal à l'intérieur de la boucle forEach, il imprime les données mais pas à l'extérieur.

  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
  }

Sur Home.js, je l'appelle ici.

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

Array [] est le journal de console de la méthode et les objets sont le journal de console de la boucle forEach.

enter image description here

0
CLUTCHER 4 nov. 2019 à 11:42

1 réponse

Meilleure réponse

Vous avez un tableau vide, car votre fonction est synchrone et firebase renvoie une promesse qui est asynchrone. C'est pourquoi, dans la plupart des cas, vous obtiendrez d'abord un tableau vide, puis après la réponse de Firebase.

Essaye celui-là:

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

Et puis dans Home.js

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