Angular firebase 持久性从 firestore 获取新数据

Angular firebase persistence fetch new data from firestore

我使用 angularfirebase 创建了一个带有 firestore 的 angular 8 应用程序。
该应用程序应该可以离线工作,这可以通过在 firebase 上启用持久性来正常工作。 (并为 angular 创建一个 serviceworker 等)。
现在我像这样从 firestore 获取数据

public async get(): Promise<Customer[]> {
  return await this.itemsCollection.valueChanges({ idField: 'id' }).pipe(take(1)).toPromise();
}

我不喜欢使用异步管道方法的可观察对象,因为它使一切都太复杂了。

我现在遇到的问题是,如果我在 firestore 本身或其他设备上更新一些数据,本地数据不会更新。刷新页面后,它会继续获取旧的缓存 firestore 数据。 我试图通过清除持久性缓存来解决此问题,但我不知道将其放入我的代码的何处才能使其正常工作。

private db: AngularFirestore, // in constructor
this.db.firestore.clearPersistence(); // somewhere after initializing firebase

我也认为这不是一个好的生产就绪解决方案。

我该如何解决这个问题?
也许我毕竟应该去观察并重写所有东西。

我认为 valueChanges 此处可能不是正确的方法。由于您不需要实时更新,为什么不使用简单的 get 每个页面重新加载?

firebase 来源:https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document

a get 调用将 return a Promise 所以不需要转换它。 persistence 只有在您的应用处于离线状态时才会成为问题。清除持久性仅建议用于测试目的,因此您在生产中避免它是正确的。

angularfire 示例,其中 .get() returns 是一个可观察对象:

public async get(): Promise<Customer[]> {
    return await this.itemsCollection.get().pipe(map(
      items => items.docs.map(doc => doc.data() as Customer)
    )).toPromise();
  }