代码之家  ›  专栏  ›  技术社区  ›  user1283776

如何优雅地处理失败的tcpsocket.connect尝试?

  •  0
  • user1283776  · 技术社区  · 7 年前

    当指定主机上没有要与之通信的现有TCP服务器时,以下代码会导致错误:

    const net = require('net');
    const argv = require('minimist')(process.argv.slice(2));
    
    try {
        var tcpSocket = new net.Socket();
        tcpSocket.connect(argv.tcpport, argv.tcphost, function onConnected() {
            console.log('connected');
            tcpSocket.on('data', function onIncoming(data) {
                console.log(data);
            });
    
            tcpSocket.on('close', function onClose(data) {
                tcpSocketConnected = false;
            });
    
            tcpSocketConnected = true;
        });
    } catch (err) {
        console.log("PRINT ME: ", err);
    }
    

    错误:

    事件:JS:183 throw er;//未处理的“错误”事件 ^

    错误:Connect EconnRejected 127.0.0.1:1906 在对象处。错误异常(Util.js:992:11) 与hostport的异常(util.js:1014:20) 在tcpconnectwrap.afterconnect[完成时](net.js:1186:14)

    即使将代码包装在 try...catch .

    • 为什么我的catch块不能捕获错误?
    • 如何优雅地处理错误?
    1 回复  |  直到 7 年前
        1
  •  1
  •   dm03514    7 年前

    您应该能够显式地处理 error 使用事件发射器API的事件(与您处理的方式相同 close data ):

    tcpSocket.on('error', handleError)

    来自DOCS:

    Event: 'error'#
    Added in: v0.1.90
    <Error>
    Emitted when an error occurs. Unlike net.Socket, the 'close' event 
    will not be emitted directly following this event unless server.close() 
    is manually called. See the example in discussion of server.listen().
    
    推荐文章