哪些类型的Javascript(Angular2)错误会阻止页面完成渲染
我是Angular2的新手,负责开发“健壮的错误处理”。到目前为止,我已经按照简单的示例(console.logging)添加了自定义错误处理。但有时,如果页面由于错误而完全停止加载,我们会希望重定向用户 但是,有时,如下所示,尽管存在错误,但页面会完全加载。是否只有某些类型的错误会阻止页面完全加载哪些类型的Javascript(Angular2)错误会阻止页面完成渲染,javascript,angular,error-handling,Javascript,Angular,Error Handling,我是Angular2的新手,负责开发“健壮的错误处理”。到目前为止,我已经按照简单的示例(console.logging)添加了自定义错误处理。但有时,如果页面由于错误而完全停止加载,我们会希望重定向用户 但是,有时,如下所示,尽管存在错误,但页面会完全加载。是否只有某些类型的错误会阻止页面完全加载 任何错误都可能导致页面无法呈现,具体取决于该错误在流程中发生的位置。如果在回调或其他异步操作中出现任何错误,都可能无法捕获 小心使用诸如“健壮的错误处理”之类的术语——我见过一些大型商业项目声称这一
任何错误都可能导致页面无法呈现,具体取决于该错误在流程中发生的位置。如果在回调或其他异步操作中出现任何错误,都可能无法捕获 小心使用诸如“健壮的错误处理”之类的术语——我见过一些大型商业项目声称这一点,但实际上只是默默地处理大量问题,有点像下一步错误恢复时的
我发现黄金法则是:
如果您的应用程序可以通过异常(例如从非必要服务获取损坏的JSON数据)继续运行,则应始终显式处理该特定情况
否则,意外异常总是会破坏某些可见的内容
第二条规则是违反直觉的,但它确实是最佳实践。用户会抱怨他们看到的错误,可见的异常和崩溃会让他们不安,降低他们对应用程序的信心
然而,他们看不到的异常仍然发生,因为你已经默默地用卡车通过它们,导致它们的任何东西仍然存在。静默异常会导致数据丢失或损坏。它们导致的bug只有在生产6个月后才能发现。它们会导致你被起诉的那种错误
用户将原谅您快速修复的明显错误,如果您丢失数据并且不立即知道,他们将离开,再也不会回来
好的,所有这些都说明了,您要突出显示的错误是异步的,并且与一个有时被描述为回调地狱的问题有关
在您的屏幕截图中,错误来自HTTP GET请求-这通常是一种方法,在该方法中,您发出AJAX请求,在请求成功时有一个回调来触发,但没有回调来处理异常
Angular2使用承诺,这是屏幕截图的下一个错误行。承诺包装这些回调并允许您链接它们-它们确实有助于回调地狱,但它们并不是一颗神奇的子弹:您必须确保每个.then()
都有一个错误处理程序或一个后续.catch()
然而,还有一种更好的方法:使用Angular2,您可以使用TypeScript,这意味着您可以使用async
和wait
。这些是承诺的语法糖,但它们还与try
-catch
一起使用,以使异步异常的错误处理更加容易
我有
TL;DR:在Angular2中,使用async
/wait
(如果需要,使用TS transpilation)确保您的承诺和回调异常能够备份,然后处理您期望/可以解决的问题,并为您不能解决的问题明显崩溃