尝试正在执行,但catch不缓存错误

问题描述 投票:0回答:2

我正在尝试测试https连接。 “try”正在执行,但“catch”不缓存错误并根据需要执行代码。

我正在使用node.js

var https = require("https");

  try {

  https.get({host:'nonsecuredomain.com'}, function(res){});

  }

  catch(err) {

  console.log('maybe an ssl error');

  }

events.js:167 throw er; //未处理的'错误'事件^

Error: certificate has expired
    at TLSSocket.onConnectSecure (_tls_wrap.js:1049:34)
    at TLSSocket.emit (events.js:182:13)
    at TLSSocket._finishInit (_tls_wrap.js:631:8)
Emitted 'error' event at:
    at TLSSocket.socketErrorListener (_http_client.js:392:9)
    at TLSSocket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
javascript
2个回答
3
投票

https.get是异步的。这意味着在网络返回结果或错误时,try catch的函数已经返回。

get返回一个将在错误时发出事件的对象。你应该监听那个'error'事件并处理那里异步抛出的错误:

https.get(url, (res) => {
    res.on('data', (d) => {
       // do stuff
    });
}).on('error', (e) => {
    console.error(e); // deal with errors
});

1
投票

正如提到的taplar,错误发生在另一个线程上,你无法在原始线程上捕获它。

通常async函数返回一个promise,你可以通过asyncFunc()来处理它.track(err => console.error(err.message))

但在这种情况下,异步函数会返回一个事件,因此您需要以这种方式处理它

https.get({host:'foo.bar'}, function onSuccess(res){
    res.on('error', (e) => {
        console.error(`Got error: ${e.message}`)
    })
}).on('error', (e) => {
    console.error(`Got error: ${e.message}`)
});
© www.soinside.com 2019 - 2024. All rights reserved.