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 !