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



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

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

捕获所有异常不会使解释器处于错误状态,但可能会使应用程序处于错误状态。未捕获的异常意味着您期望工作的东西失败了,而您的应用程序不知道如何处理该失败。

例如,如果您的应用程序是一个侦听端口80进行连接的web服务器,并且当应用程序启动时,端口正在使用中,则会引发异常。您的代码可能会忽略它,然后进程可能会在没有实际侦听端口的情况下继续运行,因此进程将是徒劳的,或者处理它:打印错误消息、警告、终止其他进程,或者以任何您希望的方式处理它。但你可以理解为什么忽略它不是一个好主意。

另一个例子是无法与数据库通信(断开连接、无法连接、收到意外错误)。如果你的应用程序流没有正确捕捉到异常,而是忽略了它,那么你可能正在向用户发送一个失败事件的确认。

异常是事件引擎的一部分。与其在try中结束,不如侦听该异常
http://debuggable.com/posts/node-js-dealing-with-uncaught-exceptions:4c933d54-1428-443 c-928d-4e1ecbdd56cb
然后以正确的方式进行响应

至于你问题的第二部分:

这实际上取决于您的应用程序。您需要测试异常是否或多或少是您所期望的。有时,异常是真实存在的,而不仅仅是找不到文件。

最新更新