#javascript #reactjs #firebase #google-cloud-firestore
#javascript #reactjs #firebase #google-cloud-firestore
Вопрос:
Я новичок в Firebase, и я нашел getDocsFromCache. Я слышал, что firebase обновил свою версию до версии 9 (модульной), и мне приходится использовать больше, чем просто query.get({source: "cache"})
. Но getDocsFromCache
у меня не сработало. Каждый раз, когда я звоню getDocsFromCache
, он не выдает никаких ошибок, но snapshot.empty
всегда имеет значение true, поэтому я не могу получить доступ к своим документам (коллекции).
Если мне нужно кэшировать вручную, как? Если нет, то чего мне не хватает?
Спасибо.
import {
collection,
getDocs,
getDocsFromCache,
query,
} from 'firebase/firestore';
import { db } from '../firebase-config';
export const getReviews = async () => {
const q = query(collection(db, 'review'));
try {
const snapshot = await getDocsFromCache(q);
console.log(snapshot.empty); // always true but not throwing any error
snapshot.forEach((doc) => {
/* ... */
});
} catch (e) {
// never reach here
const snapshot = await getDocs(q);
/* ... */
}
};
Комментарии:
1.
getDocsFromCache
пустота не является условием ошибки, когда то, что находится в кэше, говорит о том, что ваш запрос не дает результатов. Если в какой-либо момент в прошлом, когда при последнем вызовеgetDocs(q)
не было возвращено никаких результатов, в кэше будет сохранен тот же ответ — никаких результатов. Вы можете либо очистить свой кеш, чтобы повторить попытку, либо просто выдать свою собственную ошибку, когда не получите результатов, хотя ожидали их.2. Да, я попробовал
getDocsFromCache
сразу после того, как успешно получил некоторые результатыgetDocs
, но он всегда возвращал пустой ответ… Спасибо за ваш очень полезный комментарий.
Ответ №1:
Из документации по настройке автономного сохранения:
Для Интернета автономное сохранение по умолчанию отключено. Чтобы включить сохранение, вызовите
enablePersistence
метод.
Поэтому обязательно включите кэш, вызвав это сразу после инициализации Firebase и Firestore:
import { enableIndexedDbPersistence } from "firebase/firestore";
enableIndexedDbPersistence(db);
Комментарии:
1. О, да, я пробовал
enableIndexedDbPersistence(db)
раньше, но у меня это не сработало… но спасибо!