Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以捕获尝试连接到错误url时生成的异常?_Javascript_Node.js_Try Catch - Fatal编程技术网

Javascript 是否可以捕获尝试连接到错误url时生成的异常?

Javascript 是否可以捕获尝试连接到错误url时生成的异常?,javascript,node.js,try-catch,Javascript,Node.js,Try Catch,使用节点http包,似乎无法捕获打开错误URL引起的异常。这是一个问题,因为它杀死了我的集群,我想保证它将永远存在 代码如下:(使用光纤。承诺) 下面是我如何测试它的 var promise = require('fibers-promise'); var gu = require("../src/utils/generalutilities.js"); var brokenSite = 'http://foo.bar.com:94//foo.js'; promise.start(functi

使用节点http包,似乎无法捕获打开错误URL引起的异常。这是一个问题,因为它杀死了我的集群,我想保证它将永远存在

代码如下:(使用光纤。承诺)

下面是我如何测试它的

var promise = require('fibers-promise');
var gu = require("../src/utils/generalutilities.js");

var brokenSite = 'http://foo.bar.com:94//foo.js';
promise.start(function () {
  try {
    gu.openConnection(brokenSite, null, null, "GET", true);
  }
  catch (err) {
    console.log('got: ' + err);
  }
});
当我运行此代码时,我得到:


错误:getaddrinfo eNot。在try-catch中从未捕获到该错误。

您可以在页面上搜索错误代码。

在为请求提供错误处理程序时,它对我有效:

req.on('error', errorHandler);
我知道你也这么做了,但是你在发出

req.end();
在附加错误处理程序后,是否可以尝试发出
end()

作为一个补充说明,我真的建议,因为它用合理的默认值处理这样的问题。工作起来真轻松

Edit:下面是一个简单的示例,显示附加错误处理程序可以让我处理
enoint
/
ENOTFOUND
错误:

var http = require('http');

var req = http.request({hostname: 'foo.example.com'}, function(err, res) {
    if(err) return console.error(err);
    console.log('got response!');
});

req.on('error', function(err) {
    console.error('error!', err);
});

另一条有价值的信息:我不确定它如何适合光纤,但一般来说,您不应该在nodejs异步代码中抛出
。它很少按你想要的方式工作。相反,使用将任何错误作为第一个参数传递给下一个回调的标准做法,并在有意义的地方处理错误(通常,在调用链的高层,您可以对其进行合理的处理)。

它甚至从未到达页面。它用getaddrinfo eNote向我射击请在将来使用正确的代码格式。您只需将整个代码块缩进四个空格。不要使用
。那么,错误上的堆栈跟踪是什么呢?移动我的end语句不起作用,但我使用request使它起作用-我同意此库为基本http包添加了很多内容!
var http = require('http');

var req = http.request({hostname: 'foo.example.com'}, function(err, res) {
    if(err) return console.error(err);
    console.log('got response!');
});

req.on('error', function(err) {
    console.error('error!', err);
});