如果您可以将process.on(' exit')这样的调用链接起来,那将会很简洁
process.on('exit', function firstHandler(err,code,cb){ //this signature is fictitious for this example only
if(condition){
cb(null); // this would call the next process.on('exit') listener
}
});
process.on('exit', function secondHandler(err,code,cb){
//we really exit this time
});
这种功能有可能吗?我知道这违背了事件发射器/侦听器的工作方式,但我问这个问题的原因是因为我想在出现某种情况时阻止退出,然后在满足条件后重新调用process.exit()
。
答案 0 :(得分:2)
它已经这样运作了。默认情况下,EventEmitters在调用on()
方法时添加事件侦听器(尽管您可以更改默认最大值为10个侦听器)。由于exit
事件是作为常规EventEmitter实现的,因此您可以多次调用on()
来添加多个侦听器:
process.on('exit',function(){console.log('will exit')});
process.on('exit',function(){console.log('really, I will quit')});
process.on('exit',function(){console.log('DEAD')});
输出:
will exit
really, I will quit
DEAD
请注意,将按照添加的顺序调用侦听器。有关详情,请参阅活动文档:https://nodejs.org/api/events.html
答案 1 :(得分:1)
您无法取消退出。 From the doc:
当流程即将退出时发出。此时无法阻止退出事件循环,并且一旦全部退出'听众已经完成运行该过程将退出。
答案 2 :(得分:0)
一旦发出“exit”事件,就无法阻止node.js进程终止。
然而,如果你听“beforeExit”事件,如下所示:
https://nodejs.org/api/process.html
您可以通过添加呼叫来阻止进程/事件循环终止。