现在我使用一个第三方的模块,一遇到错误,直接弹出崩溃异常。
我看了他的代码都是
self.emit('error', makeError(code, text));
function makeError(code, text) {
var err = new Error(text);
err.code = code;
return err;
}
self.emit('error' 这个东西,我没发现哪里定义,是不是默认就带有?
现在我不希望遇到一个错误,程序立马崩溃,我希望使用
console.log(err);
的方式可以输出错误信息,程序仍然可以运行。在不改动人家源码的情况下,怎么实现呢?
我知道一个东西可以屏蔽不弹出报错。
process.on('uncaughtException', function(err) {
console.log(err);
console.error('Error caught in uncaughtException event:', err);
});
但我不希望整个程序都放这个东西,有些未知的错误,我还是想弹出这个的。
我自己解决了,贴出答案,方便后来者:
使用domain
var domain = require('domain');
var d = domain.create();
d.run(function () {
setTimeout(function () {
throw new Error('async error'); // 抛出一个异步异常
}, 1000);
});
d.on('error', function (err) {
console.log('catch err:', err); // 这里可以捕获异步异常
});
参考资料:http://www.infoq.com/cn/artic...