异步错误处理

试着抓

必须始终处理错误。如果你使用的是同步编程,则可以使用 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);
});