ios - 在 Firebase 中使用事务

标签 ios swift firebase firebase-realtime-database

在我的项目应用中,我同时使用了 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/

相关文章:

ios - 从 ContainerView 内部切换到另一个 ContainerView

javascript - 可以生成 Firebase UID 的短链接吗?

ios - 播放器 SKPhysicsBody 通过其他 SKPhysicsBody swift 4 Xcode 9

javascript - 网页上桌面和 iPad 的图像宽度和高度不同?

iOS Xcode 根据百分比填充背景图片

Android/FireStore 查询并返回自定义对象

firebase - 快照监听器是否有限制或费用?

ios - 在过滤后的图像之间滑动

ios - AnyObject 快速数组

ios - 如何查看用户是新用户还是老用户