Firebase通过值观察获取缓存数据的旧值

问题描述:

一旦启用,我一直面临一些与Firebase持久性有关的问题,我有机会通读剩余的已发布问题,并回顾那里的答案,但仍然没有工作要做如预期。Firebase通过值观察获取缓存数据的旧值

我已启用Firebase持久性并使用按值观察来获取特定节点的最近更新。不仅它保持获取旧值,而且一旦我离开特定的视图控制器并返回到该视图控制器,该值将变为最近的值。

有没有正确的方法来要求在第一次通话最近的价值?

码我曾尝试:

// 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来请求新数据,而无需通过任何缓存机制。

+0

我曾尝试添加* keepSync *真值,但仍然遇到相同的问题,首先加载旧值并稍后加载新值@DougStevenson –