我正在运行一个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();
答案 0 :(得分:0)
如果使用AngularFire2,则可以尝试:
// 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
是一种不好的做法。 (在我的情况下,我在收到第一个请求后做了更多请求,因此由于承诺和其他异步“任务”缓存/服务器顺序完全丢失)
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))
}