【问题标题】:Node.js error handling guarantee with net.createConnection使用 net.createConnection 保证 Node.js 错误处理
【发布时间】:2011-09-23 17:25:54
【问题描述】:

我想知道 Node.js 是否提供任何保证,即错误处理程序将捕获代码中的所有错误,如下所示:

var c = net.createConnection(port, host);
c.on('error', function (e) { ... });

我不得不处理在调用createConnection 和设置错误处理程序的语句之间插入其他语句的代码,这有时会导致createConnection 内部的错误渗透到顶层(可能是因为这些错误有时会在设置错误处理程序之前发生)。但除非我遗漏了什么,否则原则上这可能发生在上面的代码中——这不太可能。有什么方法可以真正保证createConnection 中发生的所有错误都会传递给错误处理程序?

【问题讨论】:

    标签: node.js error-handling


    【解决方案1】:

    只有在节点有错误时才会发生。

    JavaScript 是单线程的,通常不会在附加事件处理程序和创建连接之间中断进程。

    在 javascript 领域中生成的任何错误都不会被该代码捕获。

    因此,如果节点中存在错误,则可能存在您的代码无法捕获的错误。如果您在后台运行了一些狡猾的低级代码导致混乱,则可能会发生一些您的代码无法捕获的错误。

    但在正常使用下,您的代码是“线程安全的”。在发生任何错误之前绑定事件处理程序,因为您的代码是阻塞的,没有任何东西可以抛出错误。

    【讨论】:

    • 嗯,这不符合我的经验。正如我所说,如果您在对createConnection 的调用和错误处理程序的设置之间留有很大的差距,那么您可能会得到一个渗透到顶层的错误。 (即,createConnection 似乎不是同步的,它会引发错误。)
    • @foldl 你不应该留下空白。错误处理程序应该在创建连接的下一行
    • 是的,我明白了。但是,将其放在下一行只会降低问题发生的可能性。除非节点提供了一些我不知道的保证。
    • @foldl 发生错误是因为 in between 中的一行造成了错误。
    • 但是createConnection 可以引发错误。如果您尝试创建到不存在的主机的连接,然后立即附加错误处理程序,错误处理程序将被调用并出现错误。抱歉,我只是很难看到 createConnection 在设置错误处理程序之前不会引发错误的保证。如果中间代码只是一个占用合理时间的循环,则错误会渗透到顶层。
    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 2018-03-11
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2020-01-28
    相关资源
    最近更新 更多