Firestore onSnapshot возвращает значение undefined

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

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

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

Журнал отображает моментальный снимок в консоли, но когда я вызываю эту функцию, она возвращает undefined

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
5 996
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

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

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

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

db.collection("cities")
    .onSnapshot(function(querySnapshot) {
        let cities = [];
        querySnapshot.forEach(function(doc) {
            cities.push(doc.data());
        });      
    });

Другие вопросы по теме