我是Firebase的新手,我找到了getDocsFromCache。我听说firebase将它的版本更新到了第9版(模块化(,我必须使用的不仅仅是query.get({source: "cache"})
。但getDocsFromCache
对我不起作用。每次我调用getDocsFromCache
时,它都不会抛出任何错误,但snapshot.empty
总是真的,所以我无法访问我的文档(集合(。
如果我必须手动缓存,如何缓存?如果没有,我缺少什么?
谢谢。
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);
/* ... */
}
};
来自配置脱机持久性的文档:
对于web,默认情况下会禁用脱机持久性。要启用持久性,请调用
enablePersistence
方法。
因此,请确保在初始化Firebase和Firestore:后立即调用此命令来启用缓存
import { enableIndexedDbPersistence } from "firebase/firestore";
enableIndexedDbPersistence(db);
enableIndexedDbPersistence
已弃用(至少在firebase v9中(。考虑使用以下方法(我在这里采用了它(:
import { initializeFirestore, memoryLocalCache } from "firebase/firestore";
initializeFirestore(app, {
localCache: memoryLocalCache(),
});
如果您愿意,也可以导入并使用persistentLocalCache
而不是memoryLocalCache
。