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 に答える