Как вы читаете данные из пожарного магазина? - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь научиться пользоваться firestore.

В документации google сказано попробовать этот формат:

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});

Итак, я использовал это длясделать это (изменив db на fsDB и «users» на «newsletters»

fsDB.collection("newsletters").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});

При попытке этого я получаю сообщение об ошибке, что querySnapshot не определен. Снимок экрана с сообщением об ошибке прилагается.

enter image description here

Я видел этот пост и попробовал его предложение следующим образом:

fsDB.collection("newsletters").query.get().then(function(querySnapshot) { 

                            if (querySnapshot.empty) { 
                                console.log('no documents found');
                            } else {
                                    querySnapshot.docs.map(function (documentSnapshot) {
                                        console.log(documentSnapshot.data().name); 
                                    });
                            }

                        });

Эта попыткагенерирует ошибку синтаксического анализа с помощью оператора if, но я также не могу найти способ ее решить.

Это должно иметь простое решение, но я не могу понять, как получить запись из базы данных.

СЛЕДУЮЩАЯ ПОПЫТКА

Я попытался переместить код над оператором возврата и вставить переменную, как показано на скриншоте, как показано ниже, но все равно выдает ошибки, как показано.то же самое, независимо от того, сохраняю ли я или теряю скобки вокруг querySnapsгорячей.

ДОБАВИТЬ СОСТОЯНИЕ

class Fndate extends React.Component {
    state = {
        options: [],
        anzic: [],
        country: [],
        region: [],

    }

    selectCountry (val) {
        this.setState({ country: val });
      }

      selectRegion (val) {
        this.setState({ region: val });
      }

    async componentDidMount() {
        // const fsDB = firebase.firestore(); // Don't worry about this line if it comes from your config.
        let options = [];
        await fsDB.collection("abs_for_codes").get().then(function (querySnapshot) {
        querySnapshot.forEach(function(doc) {
            console.log(doc.id, ' => ', doc.data());
            options.push({
                value: doc.data().title.replace(/( )/g, ''),
                label: doc.data().title + ' - ABS ' + doc.id
            });
            });
        });


        let anzic = [];
        await fsDB.collection("anzic_codes").get().then(function (querySnapshot) {
        querySnapshot.forEach(function(doc) {
            console.log(doc.id, ' => ', doc.data());
            anzic.push({
                value: doc.data().Title.replace(/( )/g, ''),
                label: doc.data().Title + ' - ANZIC ' + doc.id
            });
            });
        });


            await fsDB
            .collection("newsletter")
            .get().then((querySnapshot) => {
                querySnapshot.forEach((doc) => {
                console.log(`${doc.id} => ${doc.data().email}`);
                }
            );
            });

        this.setState({
            options,
            anzic
        });
    }

enter image description here 5 ] 5

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Я полагаю, что вы используете React, и я только что понял, что вы вызываете соответствующий метод в методе render.

попробуйте сделать это в componentDidMount.Ссылку можно найти здесь

, поэтому ваш код будет выглядеть следующим образом:

class YourClass extends React.Component {
   componentDidMount(){
      fsDB.collection("newsletters").get().then((querySnapshot) => {
         querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
         });
      });
   }
   render(){
      return (....your existing jsx....)
   }
}

Обратите внимание, что я не знаю вашего имени класса или того, как вы определяете свойсоставная часть.Но я просто говорю, что вам нужно переместить ваш код в componentDidMount.

Мы не смогли увидеть весь ваш файл.Но я уверен, что это синтаксическая ошибка (особенно с JSX)

0 голосов
/ 28 мая 2019

Я думаю, вы должны избавиться от '.query'..empty возвращает false, если у вас есть данные в коллекции.но мне интересно, почему querySnapshot не определено в вашем случае.

db.collection("lessons").get()
  .then(function(querySnapshot) { 
    if (!querySnapshot.empty) {
        querySnapshot.docs.map(function(documentSnapshot) {
        console.log(documentSnapshot.data().name); 
     })
    } else {
    console.log('no documents found');
    }   
});

консоль

console

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