哪种类型的Javascript(Angular2)错误会阻止页面完成渲染

时间:2017-02-24 15:27:34

标签: javascript angular error-handling

我是Angular2的新手,并负责开发"强大的错误处理"。到目前为止,我已经按照简单的示例(console.logging)来添加自定义错误处理。但有时,如果页面由于错误而完全停止加载,我们将要重定向用户。

但有时,如下所示,尽管存在错误,否则页面会完全加载。是否只有某些类型的错误会阻止页面完全加载? One of the following 6 types perhaps?

enter image description here

1 个答案:

答案 0 :(得分:2)

任何错误都可能导致您的网页无法呈现,具体取决于您在流程中的位置。如果它处于回调或其他异步操作中,则无法捕获任何错误。

小心使用"强大的错误处理等术语" - 我已经看到了大量商业项目声称这一点,但实际上只是默默地解决了大量问题,有点像on error resume next

我发现黄金法则是:

  1. 如果您的应用可以继续通过异常(例如从非必要服务获取损坏的JSON数据),则应始终明确处理该特定情况。

  2. 否则意外的异常应该总是破坏可见的东西。

  3. 第二条规则是反直觉的,但它确实是最好的做法。用户会抱怨他们看到的错误,可见的异常和崩溃会使他们感到不安,并降低他们对您的应用程序的信心。

    然而,他们看不到的例外情况仍然发生,并且因为您已经默默地通过他们卡车了,因为仍然存在。无提示异常会导致数据丢失或损坏。它们会导致您在生产6个月后才发现的那种错误。它们会引起你可以起诉的那种错误。

    如果您丢失数据并且不能立即了解错误,用户将原谅您发现的明显错误,他们会立即离开并永远不会回来。

    好的,所有人都说,你似乎突出显示的错误是异步,并且与有时被描述为回调地狱的问题有关。

    在屏幕截图中,错误来自HTTP GET请求 - 这通常是一种方法,您可以在其中发出AJAX请求,在成功时触发回调,但是没有回调来处理异常

    Angular2使用promises,这是截图的下一个错误行。 Promise包装那些回调并允许你链接它们 - 它们真的有助于回调地狱,但它们并不是一个神奇的子弹:你必须确保每个.then()都有一个错误处理程序或以下.catch()

    但是,有一种更好的方法:使用Angular2,您可以使用TypeScript,这意味着您可以使用asyncawait。这些是promises的语法糖,但它们也与try - catch一起使用,可以更轻松地处理异步异常

    blogged about that in a lot more detail than I can fit here

    Angular2中的

    TL; DR:使用async / await(如果需要,可以使用TS转换)以确保您的Promise和回调异常让它备份,然后处理你期望/可以解决的问题并明显地崩溃你可以做什么。