为啥错误事件未处理?

Posted

技术标签:

【中文标题】为啥错误事件未处理?【英文标题】:Why is an error event unhandled?为什么错误事件未处理? 【发布时间】:2018-04-23 09:50:44 【问题描述】:

我很确定,根据端口号,我的代码中唯一可能引发此错误的地方是以下代码。

try 
  webServer = new WebSocketServer(
    port: args.listen
  );
 catch (exception) 
  if (exception instanceof Error) 
    logger.log('Could not bind port ' + args.listen + ' for ' + args.name +', already in use.');
  

我尝试删除if 语句,但它并没有改变结果。如果端口已经被进程绑定,则当它运行时,我会收到以下错误,我想捕获并报告该错误,而不会导致进程退出。

events.js:160 投掷者; // 未处理的“错误”事件 ^

错误:监听 EADDRINUSE :::6010 在 Object.exports._errnoException (util.js:1020:11) 在exports._exceptionWithHostPort (util.js:1043:20) 在 Server._listen2 (net.js:1262:14) 在听 (net.js:1298:10) 在 net.js:1408:9 在 _combinedTickCallback (internal/process/next_tick.js:83:11) 在 process._tickCallback (internal/process/next_tick.js:104:9) 在 Module.runMain (module.js:606:11) 运行时 (bootstrap_node.js:383:7) 启动时 (bootstrap_node.js:149:9)

为什么try...catch 不会捕捉到这个?

【问题讨论】:

您可能已经自己检查过了,但错误信息真的与此代码有关吗?你在 events.js 中的 try-catch 在第 160 行吗? 服务器是异步创建的,所以在抛出错误时执行早已离开 try..catch 块。 刚才JJJ说的我觉得是对的,这是由于javascript的异步行为,此外还需要监控WebSocketServer产生的事件。所以必须为此编写 WebSocketServer.onerror。 我想@JJJ 这是有道理的,只是我没想过。 【参考方案1】:

我认为您需要尝试一下。我认为这就是我们处理 websocket 错误的方式。

websocket.onerror = function(evt) 
            onError(evt)
         ;

【讨论】:

以上是关于为啥错误事件未处理?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Python 会在 Pygame 中为“事件”变量抛出未绑定的本地错误? [关闭]

为啥我在使用 javascript 自动完成时在 Eclipse 中收到消息:“未处理的事件循环异常 Java 堆空间”?

为捕获阶段注册的事件侦听器在冒泡之前未触发 - 为啥?

如何修复“未处理的运行时错误类型错误:事件未定义”

ExpressJS - 抛出未处理的错误事件

Laravel Echo Server 给出错误未处理错误事件:错误:连接 ECONNREFUSED