我有这个功能试图运行事务来更新Firebase值:
if opponentPoints < self.points {
print("the host won")
refPoints.runTransactionBlock({ (currentData:FIRMutableData) -> FIRTransactionResult in
print("currentData", currentData.value!)
if var pointsToUpdate = currentData.value as? [String : Any] {
var pointsUp = pointsToUpdate["points"] as! Int
pointsUp += 3
pointsToUpdate["points"] = pointsUp
currentData.value = pointsToUpdate
return FIRTransactionResult.success(withValue: currentData)
}
return FIRTransactionResult.success(withValue: currentData)
})
我有这个结构:
users
uid
points
name
etc.
问题在于,当我尝试打印currentData
时,结果为null。
我做错了什么?
答案 0 :(得分:1)
当您启动事务时,会立即调用事务处理程序,并使用客户端对数据当前值的最佳猜测。这通常是if(collision) return false
。
Firebase客户端然后将最佳猜测(null
)和您的值发送到服务器。服务器检查,意识到当前值是错误的并拒绝更改。在拒绝中,它会告诉客户当前的位置值。
Firebase客户端然后再次调用您的事务处理程序,但现在使用对当前值的新的最佳猜测。
长话短说:您的事务处理程序需要准备好接收null
作为当前值。