2017-08-07 69 views
0

一旦啓用,我一直面臨一些與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) 
     } 

    }) 

} 

回答

0

沒有,啓用持久性,你的第一個回調將包含從緩存中立即可用值(如果有的話),然後從服務器更新(如果任何)。您無法向SDK表明您需要緩存或新數據。

如果要在啓用持續性時始終保持特定位置爲最新狀態,則可以使用keepSynced向SDK指示應該始終監聽並緩存該位置處的數據。這帶來了帶寬成本的不確定性,取決於數據變化的頻率。

您可以使用REST API來請求新數據,而無需通過任何緩存機制。

+0

我曾嘗試添加* keepSync *真值,但仍然遇到相同的問題,首先加載舊值並稍後加載新值@DougStevenson –