Javascript 角度2+;http错误处理

Javascript 角度2+;http错误处理,javascript,angular,rxjs,angular2-http,Javascript,Angular,Rxjs,Angular2 Http,我这里有一个关于Angular2+Observable如何处理Http错误的问题。 当我们使用Angular2+Http API发出请求时,如果响应返回了错误状态代码,则会抛出错误 在Angular2官方初学者项目中,要调用的错误处理程序函数: someObs.catch(handler) 在处理程序中,它实际返回: Observable.throw(...) 我的问题是,这不会引发新的错误,可能导致web应用程序崩溃吗?因为在Javascript中,如果抛出一些错误,web应用程序可能会出

我这里有一个关于Angular2+Observable如何处理Http错误的问题。 当我们使用Angular2+Http API发出请求时,如果响应返回了错误状态代码,则会抛出错误

在Angular2官方初学者项目中,要调用的错误处理程序函数:

someObs.catch(handler)
在处理程序中,它实际返回:

Observable.throw(...)
我的问题是,这不会引发新的错误,可能导致web应用程序崩溃吗?因为在Javascript中,如果抛出一些错误,web应用程序可能会出现意外行为

我对Observable.catch的理解是,当某个错误发生时,我们捕捉到它,然后做其他事情(而不是抛出新的错误)。 自从

Observable.catch
仍然要求我们返回一个可观察到的,返回是否是最佳解决方案:

Observable.empty()

由于它不会发出任何新值,因此订阅者不会作出反应,如果您能够处理catch中的特定错误,则可以返回用于继续可观察链的可观察值。返回
Observable.empty()
可能有意义-取决于具体情况

如果您无法处理捕获到的错误并返回
Observable.empty
,那么您已经吞下了错误-一般来说,这不是一个好主意(特别是如果
catch
处理程序不包含某种报告机制)。相反,重新抛出错误-或返回可观察的
throw
-给订阅者处理或报告错误的机会


如果订阅服务器不处理错误,则发生的情况取决于运行时。在浏览器中,应用程序不会因为未处理的错误而崩溃;它只会被报告为一个未处理的错误——与未处理的承诺拒绝或未处理的抛出错误大致相同。在Node中,默认情况下它会快速失败/崩溃。

我有点了解它。这就像被观察者看到了错误,但不确定如何处理它并将其传递给订阅者。也可能是catch子句将随机错误解析为应用程序中约定的格式,然后让订阅者处理。但有时,当我抛出可观察到的错误时,应用程序确实会产生意外行为:在我的情况下,按钮和输入仍然有效(仍然可以单击或输入),但是javascript处理程序不再响应了。我总是强调只在组件中处理错误,这样我就知道当出现问题时我能做什么。在不同的场景中,我们希望做不同的事情。因此,您可以创建一个全局错误处理程序来处理您在服务/组件中没有处理的错误。这里有一篇关于它的文章