【问题标题】:Use Angular ErrorHandler and map error result使用 Angular ErrorHandler 并映射错误结果
【发布时间】:2020-06-09 12:35:16
【问题描述】:

我们目前的情况如前所述,我们有一个巨大的 Angular 应用程序,其中在各种具有错误处理功能的组件中触发了许多 API 调用,因此错误将通过 toast 消息显示给用户。 在我们的HttpService 中,我们正在做这样的事情:


lorem.pipe(
 ...
 catchError(this.formatError)
);
...

formatError(error) {
   return throwError(error.error);
}

error.error 包含一个 JSON 错误消息,例如 { success: false, code: 'XY' }

在我们的组件中,我们使用成功代码来显示适当的错误消息。

现在的问题: 我们正在使用 Sentry.io 使用 Angular 的 ErrorHandler 功能捕获客户端异常,但似乎 handleError 函数除了 Event 类型的正确 Object 之外,因此我们收到很多虚假错误消息传输。

我的问题是,在抛出错误结果后,map 是否有可能,以便ErrorHandlerhandleError 函数接收到有效的Event 但@987654333 中的错误部分组件内部的 observable 的 @ 仍然会得到 JSON-Object 作为错误,所以我们不必重写每个错误处理并仍然得到 EventErrorHandler

【问题讨论】:

  • 您正在寻找throwError(error)
  • 对不起...我的错...这不是问题请参阅我在 formatError 中的更新,如果我 throwError 带有 error.error 则 ErrorHandler 不会收到错误事件,如果我 throwError 只是错误,我必须重写订阅中的所有错误代码处理,...这是我的问题

标签: angular error-handling rxjs sentry angular-errorhandler


【解决方案1】:

Sentry.io 有特定的处理程序:ErrorHandler 只处理错误类型。如果你想确保它是一个事件,你需要确保你抛出的项目的类型是一个错误。在你的情况下,你需要确保你throwError(new Error(error))

更可取的是,您将为您的错误创建一个类似于以下格式的自定义类:

【讨论】:

  • 使用这种方法我仍然需要重写所有对可观察对象的错误处理,因为catch 可以防止错误被抛出......或者我在这里有什么问题吗?
  • @Nickolaus 您可以捕获错误并抛出新错误:stackoverflow.com/questions/50295564/… 捕获、更新、抛出新错误。如果您使用handleError(myHandle) 来显示它,您只需在 myHandle(error) 函数内更新为throwError(new CustomError(error)),它应该会显示在您的用户端通知中,然后将新格式传递给Sentry,您的全局处理程序。
  • 还需要注意的是,您唯一需要更改的是您的自定义处理程序,并添加新的 throwError(...)。如果它们都以相同的方式处理错误()并使用相同的功能,则不需要更改所有代码。
  • mhhh... 我会试一试并让您知道... 但是全局错误处理程序不会同时收到带有有效错误事件和格式化消息/cutom-的错误错误?
  • catchError(...) 捕获错误并阻止它继续沿管道传输,throwError(...) 创建一个新错误并将其传递到管道。
猜你喜欢
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2018-12-18
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
相关资源
最近更新 更多