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

时间:2012-06-28 01:50:33

标签: node.js module dns

我想问一下节点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 !

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

1 个答案:

答案 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 !