我使用angularfirebase用firestore创建了一个angular 8应用。
该应用程序应离线运行,这可以通过在Firebase上启用持久性来正常工作。 (并为角度创建服务人员等)。
现在,我像这样
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
我还认为这不是一个生产就绪的解决方案。
我该如何解决这个问题?
也许我毕竟应该去观察一下并重写所有内容。
答案 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();
}