在Angular Firestore查询中禁用缓存

时间:2018-08-10 17:20:17

标签: google-cloud-firestore angularfire

我正在运行一个Firestore查询以获取数据,但是该查询是从缓存的数据查询中更早地返回数据,然后在第二次从服务器中返回其他数据(之前没有查询过)。有没有一种方法可以禁用Firestore查询的缓存,以便每次查询某些内容时都将请求发送到DB。

this.parts$ = this.db.collection<OrderBom>('OrderBom', ref => {
      let query : firebase.firestore.Query = ref;
      query = query.where('orderPartLC', '==', this.searchValue.toLowerCase());
      return query;
    }).valueChanges();

2 个答案:

答案 0 :(得分:0)

如果使用AngularFire2,则可以尝试:

  1. 我在Internet上读到,可以通过不对AngularFireStoreModule调用enablePersistence()来禁用脱机持久性-这会缓存结果。
  2. 我已经做了第一项,但仍然没有成功,但是请先尝试。我设法摆脱缓存结果的方法是使用DocumentReference类中的get()方法。此方法接收GetOptions作为参数,您可以强制该数据来自服务器。用法示例:

// fireStore is a instance of AngularFireStore injected by AngularFire2
    let collection = fireStore.collection<any>("my-collection-name");
    let options:GetOptions = {source:"server"}
    collection.ref.get(options).then(results=>{
    // results contains an array property called docs with collection's documents.
    });

答案 1 :(得分:0)

将该 .valueChanges() 更改为 .snapshotChanges(),然后您可以应用过滤器。请参阅下面的示例。

我不喜欢改变默认行为(默认配置)。 我认为这是一种理想的行为,好的做法是尽快向用户显示数据,即使您刷新两次屏幕也是如此。

我认为在我们没有选择的情况下过滤 fromCache === false 是一种不好的做法。 (在我的情况下,我在收到第一个请求后做了更多请求,因此由于承诺和其他异步“任务”缓存/服务器顺序完全丢失)

this closed issue

  getChats(user : User) {
    return this.afs.collection<Chat>("chats", 
    ref => ref.where('participantsId', 'array-contains', user.id)
              .snapshotChanges()
              .pipe(filter(c=> c.payload.doc.metadata.fromCache === false)).
              .pipe(map(//probaly want to parse your object here))

  }