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

问题描述 投票:0回答:1

我使用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

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

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

angular firebase google-cloud-firestore persistence offline
1个回答
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();
  }
© www.soinside.com 2019 - 2024. All rights reserved.