Firebase setValue方法需要时间

时间:2018-09-07 08:03:08

标签: ios firebase firebase-realtime-database

我在iOs应用程序中使用firebase。

当我使用setValue方法更新节点值时,大约需要5到10秒来更新值。

如何克服这种延迟?

代码

let shiftReportsRef = Database.database().reference().child(Constants.FireBase().users).child(Constants.FireBase().shiftReports).child(firebaseToken).child(cashierId.stringValue).child(todayDate).child(posPointId.stringValue).child(shiftid.stringValue)

shiftReportsRef?.observe(.value, with: { (peakHoursSnapShot) in
   self.shiftDetails = peakHoursSnapShot.value as? [String: AnyObject] ?? [:]
   let lastUpdated = Date().gmtDateTime(.dateTimeSec)
   self.shiftDetails!["lastUpdated"] = lastUpdated as AnyObject

           if self.hasUpdatedValues == false
            {
                self.updatePeakHoursAndLastUpdateDate(amount, refndedAmount, pymtType, timeSlt)
            }

            self.hasUpdatedValues = true  
 })

1 个答案:

答案 0 :(得分:0)

问题中的代码对于预期的结果尚不清楚。让我们来看看...

定义了第一个shiftReportRef

  

let shiftReportsRef =   Database.database()。reference()。child(Constants.FireBase()。users).child(Constants.FireBase()。shiftReports).child(firebaseToken).child(cashierId.stringValue).child(todayDate).child (posPointId.stringValue).child(shiftid.stringValue)

然后将一个观察者添加到该引用中。观察者是.value,它将观察对该节点的任何更改,并通过事件将其返回快照中

shiftReportsRef?.observe(.value

但是,当第一个事件发生并且闭包中的代码执行时,该位置的数据将被覆盖

shiftReportsRef?.setValue(self.shiftDetails)

这会导致另一个.value事件触发,因此再次覆盖了该节点(我想您可以看到它的运行方向)。一遍又一遍。

所以这并不是一个确切的答案,因为我们不知道预期的结果,但这可能就是应用程序延迟的原因。