为什么Javascript异常会使解释器处于不可预测的状态?

时间:2012-03-01 12:02:08

标签: javascript node.js v8

异常导致Node.js服务器崩溃。常识是,需要监视Node.js进程并在崩溃时重新启动它们。为什么不能将整个脚本包装在try {} catch {}中或监听异常事件?

据了解,捕获所有异常是不好的,因为它使解释器处于不可预测的状态。这是真的吗?为什么?这是V8特有的问题吗?

2 个答案:

答案 0 :(得分:3)

捕获所有异常不会使解释程序处于错误状态,但可能会使应用程序处于错误状态。未捕获的异常意味着您希望工作的某些内容失败,并且您的应用程序不知道如何处理该失败。

例如,如果您的应用是侦听端口80以进行连接的Web服务器,并且当应用程序启动时端口正在使用中,则会引发异常。您的代码可能会忽略它,然后该过程可能会继续运行而不实际监听端口,因此该过程将是徒劳的,或处理它:打印错误消息,警告,杀死其他进程或任何您想要的方式待处理。但你可以看到为什么忽略它不是一个好主意。

另一个例子是无法与数据库通信(丢弃连接,无法连接,收到意外错误)。如果你的应用程序流没有正确捕获异常,但只是忽略它,你可能会向用户发送一个失败事件的确认。

答案 1 :(得分:-1)

例外是事件引擎的一部分。而不是试一试你想要做的是听取异常 http://debuggable.com/posts/node-js-dealing-with-uncaught-exceptions:4c933d54-1428-443c-928d-4e1ecbdd56cb
然后以适当的方式回应。

至于问题的第二部分:

这实际上取决于您的申请。您需要测试以查看异常是否是您期望的更多或更少。有时异常是真实的,而不仅仅是找不到的文件。