参考资料
1. 由于nodejs的事件回调机制, try catch无法捕获回调中的异常,如下例:
function callback(){
throw new Error('error here!');
}
try{
callback();
}catch(err){
console.log(err);
}
- 引入domain域,将所有该域中继承自EventEmitter类的异常事件都可以触发domain的error事件;
所以domain.run中触发的异常的对象必须包含在domain域中,否则无法被捕获,如下例:
var domain = reuqire('domain')
var EM = require('events').EventEmitter
var e = new EM()
vat timer = setTimeout(function(){
e.emit('data')
},1000);
function next(){
console.log('call back function')
throw "call back error";
}
var dm = domain.create();
dm.run(next)
上面的例子是无法捕获到next中的异常的,应为e,timer对象没有在domain域中定义,所以可以使用下面两种方法修改:
1. 利用domain.add()将eventemitter对象添加进来;
dm.add(e);dm.add(timer)
2. 将e,timer的定义移动到next函数中定义;