Node.js:链process.exit()调用

时间:2016-01-11 03:58:54

标签: node.js

如果您可以将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()

3 个答案:

答案 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

您可以通过添加呼叫来阻止进程/事件循环终止。