在我的项目应用中,我同时使用了 Firebase 存储和数据库。我想使用交易概念,但我以前从未使用过它,所以对我来说并不明显。 允许用户上传文件到服务器。我在数据库中跟踪这些上传(将上传文件的 url 分配给用户)。所以我同时执行 2 个操作:
正在上传文件
更新数据库
我想确保如果这些操作中的任何一个失败,则不会执行任何操作(例如,Internet 连接已断开)。我需要一些关于如何处理之前提到的异常以及如何在它崩溃时以适当的方式实现它的技巧。这是我的代码:
newRef.runTransactionBlock({ (currentData: MutableData) ->
TransactionResult in
let uploadTask = ref.putData(contents as Data, metadata:
self.myMetadata, completion: { (metadata, error) in
if error != nil {
...
}
DataService.instance.usersRef.observeSingleEvent(of: .value) {
(snapshot: DataSnapshot) in
...
_ = DataService.instance.usersRef.child("\
(key)/profile/myURLS").updateChildValues([ strEncoded as!
AnyHashable : downloadURL])
}
}
return TransactionResult.success(withValue: currentData)
})
{ (error, committed, snapshot) in
if let error = error {
print(error.localizedDescription)
}
}
提前致谢!
最佳答案
事务仅在事务启动的数据库上下文中运行。事务的全有或全无行为仅适用于您在数据库本身内所做的工作,不适用于任何外部属性。您的事务处理程序应该尽可能快,并且不要阻塞其他工作。
文件上传通常的做法是先执行文件上传,成功后再写入数据库。
关于ios - 在 Firebase 中使用事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48772797/