我试图连接到一个不存在的套接字进行测试。在这种情况下,抛出一个异常,我希望它能在下面的try/catch块中被捕获。createConnection
是从net
包导入的。
try {
createConnection(8000, "127.0.0.1")
}
catch(exception) {
console.log("FAILED")
}
但是,try/catch失败,并通过产生以下错误导致崩溃:
node:events:368
throw er; // Unhandled 'error' event
^
Error: connect ECONNREFUSED 127.0.0.1:8000
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16)
Emitted 'error' event on Socket instance at:
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
errno: -4078,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 8000
}
这里出了什么问题?如果应该是这样的,那么当套接字不可用时,我如何保护应用程序不崩溃?
2条答案
按热度按时间wpx232ag1#
try-catch
块只捕获通过createConnection
中的throw
发出的错误。但是,这里的错误是通过
error
事件报告的错误,您需要侦听该事件。createConnection
返回一个实现EventEmitter
的Socket
,您可以在其上注册例如错误事件的侦听器。所以它必须是:
uttx8gqw2#
我很确定这个函数是异步的,你必须监听
error
事件如果你真的想使用
try...catch
: