Node.JS:在进程退出时执行多个回调

时间:2018-10-06 13:08:37

标签: node.js

我在两个不同的组件中有两个不同的Nodejs服务器,但是它们一起在同一软件中运行。关闭程序时,我希望两台服务器正常退出,并释放它们各自的TCP端口。

对于每个人,我都有:

server1.js

process.on('exit', function(){
    server.close();
});

server2.js

process.on('exit', function(){
    server.close();
});

问题是,使用此方法只能运行这两个函数之一。

在一个功能中将它们一起关闭不是一种选择。

是否有将 add 函数添加到“退出”事件的功能?

1 个答案:

答案 0 :(得分:3)

Node.js流程exit事件可以有多个侦听器。

process
.on('exit', () => console.log('foo'))
.on('exit', () => console.log('bar'));

应该导致

  

foo

     

输出。

无需显式关闭Node.js Web服务器,因为它们将在进程退出时以任何方式关闭。

exit事件监听器通常不是关闭连接的适当位置,因为这通常是异步过程。 exit侦听器应该是同步的:

  

侦听器功能只能执行同步操作。调用“退出”事件侦听器后,Node.js进程将立即退出,从而导致仍在事件循环中排队的任何其他工作都将被放弃。

虽然beforeExit事件侦听器在某些情况下可以跳过,但适用于异步操作:

  

当Node.js清空其事件循环时,发出“ beforeExit”事件   并且没有其他工作要做。通常,Node.js进程   如果没有安排工作,但是注册了侦听器,则将退出   在“ beforeExit”事件上可以进行异步调用,从而   导致Node.js进程继续。

     

<...>

     

对于导致显式的条件,不会发出“ beforeExit”事件   终止,例如调用process.exit()或未捕获的异常。