यह विधि उपयोगकर्ताओं की एक सूची वापस करने वाली है लेकिन एक खाली सरणी लौटा रही है। जब मैं प्रत्येक लूप के अंदर लॉग कंसोल करता हूं, तो यह डेटा प्रिंट करता है लेकिन इसके बाहर नहीं।

  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);
  }

ऐरे [] विधि का कंसोल लॉग है और ऑब्जेक्ट प्रत्येक लूप से कंसोल लॉग हैं।

enter image description here

0
CLUTCHER 4 नवम्बर 2019, 11:42

1 उत्तर

सबसे बढ़िया उत्तर

आपको एक खाली सरणी मिली है, क्योंकि आपका फ़ंक्शन सिंक्रोनस है और फायरबेस एक वादा देता है जो एसिंक्रोनस है। इसलिए ज्यादातर मामलों में आपको पहले एक खाली सरणी मिलेगी, और उसके बाद फायरबेस से प्रतिक्रिया मिलेगी।

इसको आजमाओ:

 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));
  }
3
cccn 4 नवम्बर 2019, 12:59