Firebase按值观察从缓存数据中获取旧值

时间:2017-08-07 03:12:21

标签: ios swift firebase swift3 firebase-realtime-database

一旦启用了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)
        }

    })

}

1 个答案:

答案 0 :(得分:0)

不,在启用持久性的情况下,您的第一个回调将包含来自缓存的立即可用值(如果有),然后是来自服务器的更新(如果有)。您无法向SDK指出您想要缓存数据还是新数据。

如果您希望在启用持久性的同时始终使特定位置保持最新,则可以使用keepSynced向SDK指示它应始终监听并缓存该位置的数据。这取决于数据变化的频率,带宽成本不确定。

您可以使用REST API来请求新数据,而无需通过任何缓存机制。