异步错误处理
试着抓
必须始终处理错误。如果你使用的是同步编程,则可以使用 try catch
。但是如果你异步工作,这不起作用! 例:
try {
setTimeout(function() {
throw new Error("I'm an uncaught error and will stop the server!");
}, 100);
}
catch (ex) {
console.error("This error will not be work in an asynchronous situation: " + ex);
}
异步错误只能在回调函数内处理!
工作机会
Version <= V0.8
事件处理程序
Node.JS 的第一个版本有一个事件处理程序。
process.on("UncaughtException", function(err, data) {
if (err) {
// error handling
}
});
Version => V0.8
域
在域内,错误通过事件发射器释放。通过使用这些都是错误,定时器,回调方法隐式只在域内注册。如果发生错误,则发送错误事件并且不会使应用程序崩溃。
var domain = require("domain");
var d1 = domain.create();
var d2 = domain.create();
d1.run(function() {
d2.add(setTimeout(function() {
throw new Error("error on the timer of domain 2");
}, 0));
});
d1.on("error", function(err) {
console.log("error at domain 1: " + err);
});
d2.on("error", function(err) {
console.log("error at domain 2: " + err);
});