如何统一/全局处理 Angular2/Typescript 可观察对象的异常?

How to handle exception uniformly / globally for Angular2 / Typescript observables?

在 Angular2 的整个教程中,我看到异常在调用的地方被捕获,例如:

getHeroes(): Promise<Hero[]> {
    return this.http.get(this.heroesUrl)
               .toPromise()
               .then(response => response.json().data as Hero[])
               .catch(this.handleError);
  }

虽然这对教程来说可能有好处,但对我来说这听起来不可持续。我想要一些全局处理程序,例如overlay/popup 向用户发送一些消息并将错误记录到控制台 + 当我需要一些特殊处理时覆盖它(例如,如果我阅读 json 错误并发现我可以以更用户友好的方式处理它方式而不仅仅是其中一个组件的弹出窗口),而无需像 Angular2 中的示例所建议的那样在任何地方覆盖它。

是否可以实现?

P.S。例如,C# 模拟将是一些 global.asax Application_Error + TaskScheduler.UnobservedTaskException 错误处理。

你无法让所有的 Observables 做一些全局预定义的行为。

由于您可能希望以某种统一的方式处理来自 http 的大部分请求,因此您可以将默认的 http 服务替换为您自己的扩展方法,例如 get()post() 并始终附加 catch()retryWhen() 运算符。参见:

问题是,我不认为 http 抛出异常,不是通常意义上的。它在收到 HTTP 错误代码时调用 catch 委托。

通过阅读,您可以使用 ErrorHandler but in your promise you will still have to throw it like in this example

捕获全局抛出的错误,就像在 C# 中一样