【问题标题】:Nested Firebase Completion Blocks嵌套的 Firebase 完成块
【发布时间】:2018-07-16 00:23:20
【问题描述】:

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

/** 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)
    }
}

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

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore block


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      相关资源
      最近更新 更多