asynchronousJavaScript引发exception没有捕获

基本上,为什么不抓住这个例外?

var http = require('http'), options = { host: 'www.crash-boom-bang-please.com', port: 80, method: 'GET' }; try { 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(_error) { console.log("Caught the error"); } 

有人build议这些错误需要用事件发射器或callback(err)来处理(callbackerr,数据签名不是我习惯的)

什么是最好的方式去呢?

当你抛出错误try {}块已经很长时间了,因为callback在try / catch之外asynchronous调用。 所以你不能抓住它。

在错误callback函数内部发生错误时,做任何你想做的事情。

从节点版本0.8开始,您可以将例外限制到域 。 您可以将例外限制到某个域,并在该范围内捕获它们

如果你有兴趣,我写了一个小函数,捕获asynchronousexception在这里: Javascriptasynchronousexception处理与node.js。 我喜欢一些反馈这将让你执行以下操作:

 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没有function范围,try-catch也是块范围。 这就是原因。