Получение документа синхронно с помощью FireStore - PullRequest
0 голосов
/ 06 июня 2018

Я использовал parse-server в качестве бэкэнда и теперь перенес все свои вещи в FireStore (специально для хранения дополнительных пользовательских данных).Теперь с помощью синтаксического анализа я мог напрямую получать пользовательские данные, просто используя ParseUser.getCurrentUser().getString(...).Если я использую FireStore, я создал коллекцию users, и я могу сохранить document для каждого пользователя, а также он поддерживает локальное хранилище с автономной поддержкой.Но проблема, с которой я сталкиваюсь, заключается в том, что мне всегда нужно использовать методы асинхронного / обратного вызова для получения данных из document.Вот пример в Android:

final DocumentReference docRef = mFirestore
                    .collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId());
            docRef.get(Source.CACHE).addOnCompleteListener(task -> {
                if(task.isSuccessful()) {
                    ......
                } else {
                    ......
                }
            });

Есть ли способ, где мы можем напрямую получать данные синхронно из DocumentReference , предполагая, что они локально кэшируются ?Что-то вроде:

mFirestore.collection(USER_COLLECTION).document(mAuthApi.getCurrentUserId()).getString(...)

Это облегчит мне задачу, поскольку мне нужно заменить ParseUser.getCurrentUser().getString(...) эквивалентным вызовом FireStore во всей моей кодовой базе.

1 Ответ

0 голосов
/ 06 июня 2018

Есть ли способ, с помощью которого мы можем напрямую получать данные синхронно из DocumentReference, предполагая, что они локально кэшируются?

Нет, с точки зрения отзывчивых приложений.Вы не можете форсировать извлечение данных из кеша, пока вы подключены к серверу, так как вы не можете остановить извлечение данных из кеша, пока вы не подключены к серверу.

Но не толькоБаза данных Firebase Realtime или Cloud Firestore загружают данные асинхронно, как это делают почти все другие современные веб-API, поскольку получение данных может занять некоторое время.Поэтому, если вы заставите получать данные синхронно, это приведет к тому, что ваши пользователи не откроют диалоговые окна приложений.

Первоначальный ответ для большинства разработчиков состоит в том, чтобы попытаться «исправить» это асинхронное поведение, которое я лично рекомендую против этого.,Сеть асинхронна, и как только вы это примете, вы узнаете, как стать продуктивным с помощью современных веб-API.

Существует очень интересная публикация , написанная Дугом Стивенсоном., который поможет вам лучше понять эту концепцию.

...