Firestore onSnapshot возвращает неопределенное - PullRequest
0 голосов
/ 02 мая 2019

У меня есть функция, которая получает данные из Firestore, но всегда возвращает undefined.Ранее я использовал метод .get (), но я хочу, чтобы мои данные автоматически обновлялись, когда база данных получает новые данные.

Я знаю, что .onSnapshot () не возвращает обещание, поэтому использованиеасинхронный не вариант.

getdata = (dbRef) => {
                dbRef.onSnapshot(snapshot => {
            console.log(snapshot);
            return snapshot;
        });
    }

В журнале отображается снимок в консоли, но когда я вызываю эту функцию, он возвращает неопределенное значение

Ответы [ 2 ]

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

Ваш вопрос не очень понятен.Если вы пытаетесь получать обновления в реальном времени, то вы используете эту модель из этой документации https://firebase.google.com/docs/firestore/query-data/listen

db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
    console.log("Current data: ", doc.data());
});

, если вы пытаетесь получить одноразовые данные, используйте эту модель из этой документации https://firebase.google.com/docs/firestore/query-data/get-data

docRef.get().then(function(doc) {
if (doc.exists) {
    console.log("Document data:", doc.data());
} else {
    // doc.data() will be undefined in this case
    console.log("No such document!");
}

Я думаю, что документ действительно ясно об этом.

И кстати, я уверен, что onSnapshot в обновлениях в реальном времени также является асинхронным.Если вы хотите получать обновления в режиме реального времени, то вы не можете иметь его в функции.Для функции используйте одноразовую модель данных.Вот очень хороший пример обновления в реальном времени

http://jsfiddle.net/katowulf/cw7dgs8a/

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

Вы можете прочитать учебник по этой ссылке "прослушивать обновления в реальном времени"

db.collection("cities")
    .onSnapshot(function(querySnapshot) {
        let cities = [];
        querySnapshot.forEach(function(doc) {
            cities.push(doc.data());
        });      
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...