Первая реализация кэша для получения в firestore - PullRequest
0 голосов
/ 11 июня 2018

Я хочу, чтобы firestore каждый раз сначала извлекал данные из кеша.В соответствии с документацией Firestore передача «кеш» или «сервер» должна быть включена одинаково.Пример ниже

db.collection("cities").where("capital", "==", true)
    .get("cache")
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, " => ", doc.data());
        });
    })
    .catch(function(error) {
        console.log("Error getting documents: ", error);
    });

Однако, независимо от того, установил ли я «кеш» или «сервер», запрос, по-видимому, сначала пробует сеть, а затем кеш.

1 Ответ

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

Так как get() получает ваше значение только один раз, он всегда проверяет последнее значение для данных с сервера.Если это первая операция Firestore в вашем приложении, для этого может потребоваться установить сетевое соединение с базой данных, что может занять некоторое время.

Если вы хотите быстро получить данные из кэша, а затем получить изменения с сервера, используйте onSnapshot:

db.collection("cities").where("capital", "==", true)
    .onSnapshot(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, " => ", doc.data());
        });
    })
    .catch(function(error) {
        console.log("Error getting documents: ", error);
    });

Также см. Документацию Firestoreпри получении обновлений в реальном времени

Чтобы сообщить get() о возврате данных из кэша, выполните:

db.collection("cities").where("capital", "==", true)
    .get({ source: 'cache' })
    .then(function(querySnapshot) {
        ...

Но учтите, что это означает, что вы никогда не получите обновленное значение изсервер.

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