ios - 嵌套的 Firebase 完成 block

标签 ios swift firebase google-cloud-firestore block

最近我一直在开发一个需要以下代码的应用程序:

/** Unfriends the user with the specified UID */
func removeFriend(_ userID: String, completion: CompletionHandler? = nil) {
    CURRENT_USER_FRIENDS_REF.document(userID).delete { (error) in
        guard error == nil else{
            completion?(error)
            return
        }

        self.users.document(userID).collection(NameFile.Firebase.UserDB.friends).document(AppStorage.PersonalInfo.uid).delete(completion: completion)
    }
}

问题出现在嵌套这些 block 中。如果第一个 block 成功,但第二个 block 抛出错误,完成处理程序将传递一个错误。然而,实际上,一半的过程成功并成功写入数据库。是否可以让这两个 block 作为一个 block 一起工作,如果发生错误,它会传递错误。 (无需重构数据库)

最佳答案

如果您有多个必须调用成功或全部失败的写操作,您应该使用 transaction or batched write .两者之间的区别在于您是否需要文档的当前值来确定其新值。如果您不需要任何文档的当前值,请使用批量写入。如果您确实需要文档的当前值,请对所有写入使用事务。

关于ios - 嵌套的 Firebase 完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51353239/

相关文章:

android - 如何为 firebase 存储中的文件生成公共(public) url?

firebase - Firebase动态链接是否支持自定义参数?

ios - Xcode 核心数据终止问题?

ios - 从 JSON 设置后立即释放模型属性

ios - MKMapKit 可拖动注释和绘制多边形

android - 无法更新 firebase 版本

objective-c - 以编程方式查找区域

android - 错误 : The method `CircularNotchedRectangle` is not defined

swift - 您可以将路径相互组合(追加)吗?

ios - Swift 3 多线程使用哪个队列?