Node.js:v0.8中的域模块

我想问一些关于节点v0.8中的新模块“域”的问题。

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 ! 

所以我的问题是为什么它不输出“赶上一些错误:超时!” 添加上面的行后? 谢谢。

执行这里没有达到dm.run(function() {根本就不得不在任何exception发生之前添加处理程序到域。

与之比较

 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 !