如何为Angular2 / Typescript observable统一/全局处理异常?

时间:2016-10-26 08:07:58

标签: angular typescript rxjs observable rxjs5

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

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

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

有可能实现吗?

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

2 个答案:

答案 0 :(得分:3)

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

由于您可能希望以某种统一的方式处理来自http的主要请求,因此您可以使用自己的服务替换默认的http服务,以扩展get()或{{1}等方法}并始终附加post()catch()运算符。参见:

答案 1 :(得分:2)

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

通过阅读,您可以使用ErrorHandler捕获全局抛出的错误,例如在C#中,但在您的承诺中,您仍然必须像在此example

中那样抛出它