Node.js:使用domain.dispose()
我在node.js中编写一个服务器,并希望在连接失败时保持运行。 所以,我试图使用新的domain
模块,但无法find使用domain.dispose()
的正确方法。
首先, node -v
:v0.8.3
我认为应该调用domain.dispose()
来清除错误,以清除域对象的设置。 但结果不是我所期望的,我也找不到任何有关正确使用的文档或讨论。
这是我想出来的代码来隔离问题:
var domain = require('domain'); var EventEmitter = require('events').EventEmitter; var i = 0; function cycle() { process.nextTick(cycle); var emitter = new EventEmitter(); emitter.i = ++i; emitter.on('test', function() { throw new Error('asdasd ' + emitter.i); }); var dm = domain.create(); dm.on('error', function(er) { console.error('Error', er); //dm.dispose(); }); dm.add(emitter); emitter.emit('test'); } cycle();
它创build一个EventEmitter
,它是一个单独的域,将发射器添加到域并触发发射器的错误。 然后重复。
一切都很好,循环继续,错误logging一个接一个:
[...] Error { [Error: asdasd 1068] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } Error { [Error: asdasd 1069] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } [...]
现在,我添加domain.dispose()
,我想它应该是:
dm.on('error', function(er) { console.error('Error', er); dm.dispose(); });
这样,循环只重复两次:
Error { [Error: asdasd 1] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } Error { [Error: asdasd 2] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } }
没有更多的输出,程序刚刚退出。
所以,要么我不明白domain.dispose()
的目的和语义,或者做它不应该做的事情。 我可能会深入研究这个问题,但同时,如果仅仅为了子孙后代,澄清这个问题还是很好的。 如果您知道如何使用该function来保持应用程序的活跃,请分享。 谢谢。
通过使用v0.8.11节点将正确地与dm.dispose()
循环。