Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Node.js: Domain module in v0.8

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.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

Node.js: Domain module in v0.8

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×