nodejs 异常捕获

(1)

function error() {
throw new Error(“catch me”);
}

error();

process.on(‘uncaughtException’, function (err) {
console.log(‘uncaughtException ->>>’,err);
});

(2)

function sync_error() {
var r = Math.random() * 10;
console.log("random num is " + r);
if (r > 5) {
    throw new Error("Error: random num" + r + " > 5");
}
}

setInterval(function () {
    sync_error();

}, 1000);

process.on('uncaughtException', function (err) {
console.log('uncaughtException ->>>',err);
});

(3)

function async_error() {
setTimeout(function(){
    var r = Math.random() * 10;
    console.log("random num is " + r);
    if (r > 5) {
        throw new Error("Error: random num" + r + " > 5");
    }
  },10)

}

setInterval(function () {
try {
    async_error();
} catch (err) {
    console.log(err);
}
}, 1000)

process.on('uncaughtException', function (err) {
console.log(err);
});

第一种情况,捕获不到异常;第二种情况,捕获一次异常程序就退出;第三种情况,程序不会退出。为什么会出现这几种情况?

阅读 3.1k
1 个回答

第一种情况,应给先监听uncaughtException,
process.on(‘uncaughtException’, function (err) {
console.log(‘uncaughtException ->>>’,err);
});
function error() {
throw new Error(“catch me”);
}

error();

第二种情况,setInterval里抛出异常,没有捕获所以setInterval退出,不在循环。
第三种情况,setInterval里有异步操作settimeout,所以不会退出,异步异常被process捕获

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题