如何使用调用站点上下文报告/传播 Firestore 错误到 recordError

Posted

技术标签:

【中文标题】如何使用调用站点上下文报告/传播 Firestore 错误到 recordError【英文标题】:How to report/propagate Firestore errors with call site context to recordError 【发布时间】:2020-01-25 04:19:41 【问题描述】:

我正在使用 Firestore 来持久化数据,Firestore 文档和 Google 结果中的所有错误处理示例基本上具有相同的特别不丰富的模式:

.setData(user.documentData)  error in
          if let error = error 
            print("Error writing user to Firestore: \(error)")
          
        

但是,我想将有关调用站点的上下文(在上面的示例中,我试图写入用户)添加到错误中,而不是获取通用的本地化描述 FireStore 写入数据的错误在录制时失败错误并传播错误。例如:

.setData(user.documentData)  error in
          if let error = error 
            Crashlytics.sharedInstance().recordError(error)
            print("Error writing user to Firestore: \(error)")
            completion(.failure(error))
          
        

是否有一种模式来创建一个遵循 Error 的 Swift 自定义错误枚举,该错误以 Firestore 错误开始,以便保留其上下文并添加错误的应用程序上下文?是否有其他方法可以提供有关在 FireStore 错误中写入失败的本地上下文信息?

【问题讨论】:

【参考方案1】:

我已经根据 SwiftBySundell 的帖子实现了这个,这似乎是合适的。

enum FireStoreError : Error 
  case userWriteError(String)
  ....


extension FireStoreError : LocalizedError 
  var localizedDescription : String? 
    switch self 
    case .userWriteError(let s): return NSLocalizedString("Unable to persist user: \(s)", comment: "")
    
  


.setData(user.documentData)  error in
          if let error = error 
            let userError = FireStoreError.userWriteError(error.localizedDescription)
            Crashlytics.sharedInstance().recordError(userError)
            completion(.failure(userError))
          
        

【讨论】:

以上是关于如何使用调用站点上下文报告/传播 Firestore 错误到 recordError的主要内容,如果未能解决你的问题,请参考以下文章

Spring事务之传播机制

Spring @Transactional 只读传播

如何在网页中同时传播数百个带有动画和交互式 webgl 上下文的小画布?

如何使用 RpcRaiseException() 进行良好的错误处理?

面试官:知道Spring事务传播行为吗?多个方法之间调用事务如何传播?还好我看过

spring--事务原理