我在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
})
答案 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事件触发,因此再次覆盖了该节点(我想您可以看到它的运行方向)。一遍又一遍。
所以这并不是一个确切的答案,因为我们不知道预期的结果,但这可能就是应用程序延迟的原因。