gpt4 book ai didi

swift - runTransactionBlock currentData 为空

转载 作者:行者123 更新时间:2023-11-28 06:27:53 26 4
gpt4 key购买 nike

我有这个函数试图运行事务来更新 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。

我做错了什么?

最佳答案

当您开始一个事务时,您的事务处理程序会立即被调用,并使用客户端对数据当前值的最佳猜测。这通常是 null

然后 Firebase 客户端将最佳猜测 (null) 和您的值发送到服务器。服务器检查,意识到当前值是错误的并拒绝更改。在该拒绝中,它会告诉客户端该位置的当前值。

然后 Firebase 客户端再次调用您的事务处理程序,但现在使用对当前值的新的最佳猜测。

长话短说:您的事务处理程序需要准备好接收 null 作为当前值。

关于swift - runTransactionBlock currentData 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com