javascript - 如何处理第三方 Node.js 库中的断言错误

标签 javascript node.js httprequest

我正在使用 Node.js 请求模块请求,如下所示

let request = require('request');
request(SOME_URL, { proxy }, function (error, response, body) {
    if (error) {
        console.log('Error: ' + error);
        return;
    }
    // my actual code here that usually runs
});

98% 的情况下这是有效的,但有时我使用的代理会出现问题,这会导致一些奇怪的行为。我的代码将正常运行,直到突然停止并显示以下堆栈跟踪:

assert.js:85
  throw new assert.AssertionError({
  ^

AssertionError: 542 == 0
    at ClientRequest.onConnect (/home/stephen/apps/my-cool-app/node_modules/tunnel-agent/index.js:159:14)
    at ClientRequest.g (events.js:291:16)
    at emitThree (events.js:116:13)
    at ClientRequest.emit (events.js:194:7)
    at Socket.socketOnData (_http_client.js:395:11)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    at TCP.onread (net.js:548:20)

现在,我希望回调中返回任何错误。但这并没有发生,所以我无法在那里适本地处理它。

我尝试将其包含在 try/catch block 中,如下所示:

try {
    request(SOME_URL, { proxy }, function (error, response, body) {
        if (error) {
            console.log('Error: ' + error);
            return;
        }
        // my actual code here that usually runs
    });
} catch (err) {
     console.log('Caught error: ' + err);
}

但这也不起作用——我仍然收到 AssertionError 并且我的程序停止了。

所以,我的问题是:我该如何优雅地处理这个问题?如果我遇到此断言错误,我想取消(或忽略)该请求并继续处理另一个请求,而不是让我的程序崩溃停止。

最佳答案

这可能是处理这些不受欢迎的断言的唯一方法:

process.on('uncaughtException', err => {

    if (err.name === 'AssertionError') {
        // handle the assertion here or just ignore it..

    }


});

关于javascript - 如何处理第三方 Node.js 库中的断言错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402287/

相关文章:

node.js - 在 Apple M1 (Big Sur) 上使用 node-gyp 安装 native Node.js 附加组件时出错

angular - 拦截传出链接Angular 4

ios - Alamofire POST请求错误NSURLErrorDomain代码= -999

javascript - 从 DOM 中选择元素时提高性能

javascript - Chrome/Firefox console.log 总是附加一行 'undefined'

node.js - token 未在nodejs中创建

iphone - 在 XCode 4 中安装 ASIHTTPRequest

javascript - 母版页中的 JavaScript 文件代码未在 Web 表单中运行

javascript - Google Maps JS API + JSON - 多个标记未显示

angularjs - 如何定义具有 2 ng-repeats 的序列号?