尝试正在执行,但是catch无法缓存错误

时间:2019-01-04 23:20:29

标签: javascript

我正在尝试测试https连接。 正在执行“尝试”,但是未执行“捕获”未缓存错误并按需要执行代码。

我正在使用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          投掷者//未处理的“错误”事件          ^

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)

2 个答案:

答案 0 :(得分:3)

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

get返回一个对象,该对象将在发生错误时发出事件。您应该侦听该“错误”事件并处理在那里异步引发的错误:

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

答案 1 :(得分:1)

正如塔布拉所说,该错误发生在另一个线程上,您无法在原始线程上捕获它。

通常,异步函数返回一个promise,您可以通过以下方式处理它: asyncFunc()。catch(err => console.error(错误消息))

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

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}`)
});