Angular Firebase持久性从Firestore获取新数据

时间:2019-09-26 20:18:15

标签: angular firebase google-cloud-firestore persistence offline

我使用angularfirebase用firestore创建了一个angular 8应用。
该应用程序应离线运行,这可以通过在Firebase上启用持久性来正常工作。 (并为角度创建服务人员等)。
现在,我像这样

从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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

一个get调用将返回一个Promise,因此无需进行转换。 persistence仅在您使应用程序离线时才是问题。建议仅出于测试目的而清除持久性,因此在生产中避免使用持久性是正确的。

angularfire的示例,其中.get()返回一个可观察值:

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