我想问一下节点v0.8中的新模块“Domain”。
var domain = require('domain');
var EventEmitter = require('events').EventEmitter;
var dm = domain.create();
dm.on('error', function(err) {
console.log('Catch some error: ', err.message);
});
var emitter = new EventEmitter();
emitter.on('test', function() {
throw new Error('Emit an error !');
});
dm.add(emitter);
// emitter.emit('test'); <- This line
dm.run(function() {
setTimeout(function() {
throw new Error('Timeout !');
}, 10);
});
输出:
Catch some error: Timeout !
如果添加行
emitter.emit('test');
然后输出:
Catch some error: Emit an error !
所以我的问题是为什么它不输出“抓住一些错误:超时!”添加以上行后?感谢。
答案 0 :(得分:3)
此处的执行根本没有达到dm.run(function() {
,您必须在发生任何异常之前向域添加处理程序。
与
比较var domain = require('domain');
var EventEmitter = require('events').EventEmitter;
var dm = domain.create();
dm.on('error', function(err) {
console.log('Catch some error: ', err.message);
});
var emitter = new EventEmitter();
emitter.on('test', function() {
throw new Error('Emit an error !');
});
dm.add(emitter);
dm.run(function() {
setTimeout(function() {
throw new Error('Timeout !');
}, 10);
});
emitter.emit('test');
输出:
Catch some error: Emit an error !
Catch some error: Timeout !