我知道this q/a绕过了firebase中的缓存,但是我想在firestore中做同样的事情,并且与听众一起这样做......
我目前的代码就是这样......
FIRQuery *query = [[db collectionWithPath:@"mycollection"] queryWhereField:@"uid" isEqualTo:user.uid];
[query addSnapshotListener:^(FIRQuerySnapshot *querySnapshot, NSError *error) {
//...
这很好用,除了它很容易给我旧的数据(或者在源头删除后的数据)。我想做的就是......
if (/*some time has passed*/ || /*first time this launch*/) {
// magic to force the query to bypass anything cached
}
FIRQuery *query = [[db collectionWithPath:@"mycollection"];
// and so on...
对其他问题的最佳看似答案建议使用交易......
[db runTransactionWithBlock:^ id(FIRTransaction *transaction, NSError **error) {
// stuck
但FIRTransaction
只有一个与读取相关的方法,即getDocument:error:
传递FIRDocumentReference *
。
此外 - 未来的编辑:我在Objective-c中写作,但我很乐意快速阅读建议。如果您决定删除swift标签,请解释某人如何用任何一种语言表达问题。 (请注意:声明"我们只使用语言标签来询问有关语言本身的问题"可证明是错误的。)
答案 0 :(得分:0)
尝试绕过本地缓存并不是最好的服务,因为您不应该假设客户端有任何缓存的内容。 SDK完全管理缓存 - 它是作为优化提供的,因此您不需要为文档读取支付更多费用。
如果您需要对数据库中发生更改的事项进行审计跟踪,则应将该跟踪本身记录在数据库中,以便无论何时访问数据都无论数据是否正确。