1

我想问一些关于节点 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 !

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

4

1 回答 1

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 !
于 2012-06-28T03:06:26.350 回答