我一直面临着一些问题与firebase持久性一旦启用,我有机会阅读其余张贴的问题,并审查了那里的答案,但仍然没有得到工作的预期。
我已经启用了firebase持久性,并使用observe by value来获取特定节点的最新更新。它不仅继续获取旧值,而且一旦我离开特定的视图控制器并返回到该视图控制器,该值将更改为最近的值。
在第一次调用时是否有正确的方法请求最近的值?
我试过的代码:
// MARK: Bill authenticate function
func authenticateBill(completion: @escaping (_ bill: Double?, _ billStatus: BillError?) -> Void) {
// Observe incase bill details exist for current case
let billRef = self.ref.child("bills").child((caseRef?.getCaseId())!)
billRef.observe(FIRDataEventType.value, with: { (billSnapshot) in
if !billSnapshot.exists() {
completion(nil, BillError.unavailable)
return
}
if let billDictionary = billSnapshot.value as? [String: AnyObject] {
let cost = billDictionary["cost"] as! Double
print("Cost: ", cost)
completion(cost, nil)
}
})
}
最佳答案
不,启用持久性后,第一个回调将包含缓存中的立即可用值(如果有),然后是服务器的更新(如果有)。不能向SDK指示您想要缓存或新鲜数据。
如果希望在启用持久性时始终保持特定位置的最新状态,可以使用keepSynced向SDK指示它应该始终在该位置侦听和缓存数据。这在带宽上的代价是不确定的,这取决于数据更改的频率。
您可以使用REST API来请求新数据,而无需通过任何缓存机制。