【问题标题】:Firestore doesn't throw an offline error for queriesFirestore 不会为查询引发离线错误
【发布时间】:2020-09-29 22:08:28
【问题描述】:

在我的网站上,我正在尝试为 Firebase 可能离线时添加错误处理。到目前为止,我设法让 Firestore 仅在我仅获取一个文档时抛出离线错误。但是,当我查询多个文档时,Firestore 会假装没有发生任何错误,只是返回一个空列表。

以下代码仅获取一个文档,如果 Firebase 离线/无法访问,将正确引发 Firestore 错误。

const getProjectEntry = async (projectEntryId: string) => {
 const doc = await db.collection('projectentries').doc(projectEntryId).get();
 if (doc.exists && doc) {
   return { ...doc.data(), id: doc.id } as IProjectEntry;
 }
 return null;
};

以下代码获取多个文档并假装一切正常,并在离线时返回一个空列表。

const getProjectEntries = async () => {
  const querySnapshot = (await db.collection('projectentries').get()).docs;
  return querySnapshot.map((doc) => {
    return { ...doc.data(), id: doc.id } as IProjectEntry;
  });
};

【问题讨论】:

    标签: typescript firebase google-cloud-firestore


    【解决方案1】:

    默认情况下,get() 调用会尝试从服务器获取您请求的数据,如果无法到达服务器,则将其从缓存中返回。

    在您的第一个示例中,由于您请求的特定文档可能不存在于本地缓存中,因此会导致错误/

    在第二个示例中,它导致对本地缓存的查询,该查询不返回任何结果。

    所以代码在这两种情况下都按设计工作,尽管行为不同。如果您希望服务器在无法到达服务器时出现故障,请指定GetOptions in the call to get

    db.collection('projectentries').get({ source: 'server' })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 2020-10-26
      • 2012-12-29
      相关资源
      最近更新 更多