【问题标题】:Firestore (Web version 9 modular): getDocsFromCache seems not workingFirestore(Web 版本 9 模块化):getDocsFromCache 似乎不起作用
【发布时间】:2022-01-15 18:28:00
【问题描述】:

我是 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);

   /* ... */
 ​}
};

【问题讨论】:

  • getDocsFromCache 为空不是错误条件,因为缓存中的内容表明您的查询没有结果。如果在过去的任何时候,当您最后一次调用 getDocs(q) 时没有返回任何结果,缓存将存储相同的响应 - 没有结果。您可以清除缓存以重试,也可以在没有结果时直接抛出您自己的错误。
  • 是的,我在使用getDocs 成功获得一些结果后立即尝试了getDocsFromCache,但它总是返回空响应...感谢您非常有帮助的评论。

标签: javascript reactjs firebase google-cloud-firestore


【解决方案1】:

来自configuring offline persistence上的文档:

对于 Web,默认情况下禁用离线持久性。要启用持久性,请调用enablePersistence 方法。

所以请确保通过在initializing Firebase and Firestore 之后调用它来启用缓存:

import { enableIndexedDbPersistence } from "firebase/firestore"; 

enableIndexedDbPersistence(db);

【讨论】:

  • 哦,是的,我之前尝试过enableIndexedDbPersistence(db),但它对我不起作用......但是谢谢!
猜你喜欢
  • 2021-11-16
  • 2021-11-25
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
  • 2013-09-08
  • 2019-03-07
  • 2020-04-14
  • 2018-11-27
相关资源
最近更新 更多