【问题标题】:Firebase observe by value fetches old value from cached dataFirebase 按值观察从缓存数据中获取旧值
【发布时间】:2018-01-14 06:54:14
【问题描述】:

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

    })

}

【问题讨论】:

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


    【解决方案1】:

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

    如果您希望在启用持久性的同时始终保持特定位置的最新状态,您可以使用 keepSynced 向 SDK 指示它应该始终在该位置侦听和缓存数据。这会带来不确定的带宽成本,具体取决于数据更改的频率。

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

    【讨论】:

    • 我确实尝试添加具有真实值的 keepSync 但仍然遇到同样的问题,首先加载旧值,然后加载新值@DougStevenson
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多