如何使用调用站点上下文报告/传播 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在网页中同时传播数百个带有动画和交互式 webgl 上下文的小画布?
如何使用 RpcRaiseException() 进行良好的错误处理?