Domain#bind()がやってること
var d = require('domain').create(); d.on('error', function(e) { console.log('handled error: ' + e.message); }); d.enter(); //やってることは process.domain = d; fireError.apply(d, []); d.exit(); function fireError() { throw new Error('fire error!'); }
Domain#bind()でやってることの中身を短いサンプルでシュミレーションすると、上記コード中のenter()、apply()、exit()の3行です。enter()でスタックにカレントのドメインを積み上げて関数apply時にこのドメインをコンテキストとして渡しています。そのあとexit()でスタックからカレントドメインを下ろしています。
だから、Domain#enter()とexit()はユーザーアプリレベルでは呼ばれること想定していない作りですね。これらを呼ぶのはDomainの拡張機能を作るみたいなときぐらいなのかな。
ちなみに、Domain#run()は、中でthis.bind(callback)();となっていて、Domain#intercept()は、中でthis.bind(callback, true);です。