Basically, why isn\'t this exception caught?
var http = require(\'http\'),
options = {
host: \'www.crash-boom-bang-please.com\',
port: 80,
When you are throwing the error the try {}
block has been long left, as the callback is invoked asynchronously outside of the try/catch. So you cannot catch it.
Do whatever you want to do in case of an error inside the error callback function.
As of node version 0.8 you can constrain exceptions to domains. You can constrain exceptions to a certain domain and catch them at that scope
If you're interested, I've written a small function that catches asynchronous exceptions here: Javascript Asynchronous Exception Handling with node.js. I'd love some feedback This will let you perform the following:
var http = require('http'),
options = {
host: 'www.crash-boom-bang-please.com',
port: 80,
method: 'GET'
};
atry(function(){
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
throw new Error("Oh noes");
});
req.end();
}).catch(function(_error) {
console.log("Caught the error");
});
Javascript doesn't have just function scope, try-catch also is block scoped. That is the reason.