Извлечение документа Firestore при сбое в автономном режиме и без возврата к локальному хранилищу - PullRequest
0 голосов
/ 22 апреля 2020

Я использую FireStore в Expo React Native.

Мой код:

import * as firebase from "firebase";
import '@firebase/firestore';

store = {
    uid: null,
    data: null
}

firebase.initializeApp(firebaseConfig);

export async function startUpAsync() {
    await firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL);
    try {
        await new Promise((resolve => {
            try {
                firebase.auth().onAuthStateChanged(user => {
                    store.uid = user?.uid;
                    resolve();
                })
            }
            catch (e) {
                logError(e);
                return null;
            }
        }));
        const doc = await firebase.firestore().collection('my-collection').doc(store.uid).get();
        if (doc.exists) {
            store.data = doc.data();
        }
        else {
            store.data = {...initalData};
        }
        return store.data;
    }
    catch (e) {
        console.error(e);
        return null;
    }
}

Я пытаюсь протестировать свой код без соединения inte rnet.

Сначала я запускаю приложение с подключением, проверкой подлинности и получением документов. Затем я добавил следующую строку в startUpAsync после setPersistence:

firebase.firestore().disableNetwork()

Аутентификация работает нормально, однако загрузка документа не удалась. Я ожидал получить документ из локального хранилища. Сообщение:

Failed to get document because the client is offline.

Я что-то упустил в своей конфигурации Firebase?

Версии:

"@firebase/firestore": "1.12.1"
"expo": "37.0.0"
"firebase": "7.9.0"
"react": "16.9.0"
"react-native": "https://github.com/expo/react-native/archive/sdk-37.0.0.tar.gz"

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

1 Ответ

0 голосов
/ 26 апреля 2020

Мне не хватало вызова конфигурации

firebase.firestore().enablePersistence()
...