这是退出Node.js进程的本机出口挂钩:
process.on('exit', function () { // listen to exit event
});
这个钩子将通过调用
直接调用process.exit(); // probably does some magic to remove calls from queue somehow, somewhere in the Node.js process
但是,我在网上看到了一些推荐这样做的代码:
process.on('exit', function () {
if (condition) {
process.exit(1); // will this invoke the same exit event?
} else {
process.exit(0); // will this invoke the same exit event?
}
});
我的问题是,钩子内的process.exit
调用是否会导致无限调用堆栈的任何问题?
答案 0 :(得分:2)
process.exit
有一个名为process._exiting
的标记。因此,如果设置了标记,则不会再发出process
的{{1}}事件。
这就是process.exit
的样子,从Node.js v5.1.0开始,
exit
如果你想乱搞,那就试试吧
process.exit = function(code) {
if (code || code === 0)
process.exitCode = code;
if (!process._exiting) {
process._exiting = true;
process.emit('exit', process.exitCode || 0);
}
process.reallyExit(process.exitCode || 0);
};
答案 1 :(得分:0)
当您调用process.exit()(并可选择传入退出代码)时,会导致处理停止。将触发exit事件,这是任何代码运行的最后机会,并且事件循环已停止。此后不久,Node.js实际上完全停止并返回指定的退出代码。因此,process.exit()阻止Node.js在该点之后做任何有形的事情并且应用程序停止。