B T*_*B T 6 javascript error-handling node.js
阅读http://nodejs.org/api/domain.html上的文档使其有点模糊:" 尽最大努力尝试清理与域相关的任何和所有IO ".它提到计时器已关闭,这不完全是IO.知道domain.dispose所做的全面的事情列表会很高兴.有人有这个清单吗?
此外,有没有办法挂钩该功能 - 即允许在运行domain.dispose()时调用一些自定义清理代码?
dispose函数调用exit和dispose函数,删除所有侦听器,删除所有错误处理程序,并尝试终止域的所有成员.检查域是否具有父项的函数,如果是,则从域中删除它.然后将域设置为垃圾收集,并将其标记为已处置.
从Node文档:
一旦域被处置,dispose事件将发出.
我会更深入地讨论这个主题,但Node源已经很好地注释了.
您正在谈论的计时器将在这里,域的成员正在迭代.
this.members.forEach(function(m) {
// if it's a timeout or interval, cancel it.
clearTimeout(m);
});
Run Code Online (Sandbox Code Playgroud)
这是来自节点源:
Domain.prototype.dispose = function() {
if (this._disposed) return;
// if we're the active domain, then get out now.
this.exit();
this.emit('dispose');
// remove error handlers.
this.removeAllListeners();
this.on('error', function() {});
// try to kill all the members.
// XXX There should be more consistent ways
// to shut down things!
this.members.forEach(function(m) {
// if it's a timeout or interval, cancel it.
clearTimeout(m);
// drop all event listeners.
if (m instanceof EventEmitter) {
m.removeAllListeners();
// swallow errors
m.on('error', function() {});
}
// Be careful!
// By definition, we're likely in error-ridden territory here,
// so it's quite possible that calling some of these methods
// might cause additional exceptions to be thrown.
endMethods.forEach(function(method) {
if (typeof m[method] === 'function') {
try {
m[method]();
} catch (er) {}
}
});
});
// remove from parent domain, if there is one.
if (this.domain) this.domain.remove(this);
// kill the references so that they can be properly gc'ed.
this.members.length = 0;
// finally, mark this domain as 'no longer relevant'
// so that it can't be entered or activated.
this._disposed = true;
};
Run Code Online (Sandbox Code Playgroud)