Node.js: Domain module in v0.8
Problem
I want to ask something about the new module 'Domain' in node 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');
outputs:
Catch some error: Timeout !
And if adding the line
emitter.emit('test');
Then outputs:
Catch some error: Emit an error !
So my question is why it does not output "Catch some error: Timeout !" after adding the above line ? Thanks.
Problem courtesy of: Boris
Solution
execution here does not reach dm.run(function() {
at all, you have to add handlers to domain before any exception happens.
Compare with
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');
output:
Catch some error: Emit an error !
Catch some error: Timeout !
Solution courtesy of: Andrey Sidorov
Discussion
View additional discussion.