node.js如何知道何时退出进程?

我对node.js的理解是,当callback队列为空时,进程退出,这意味着所有的callback都被执行。 但是,我注意到在某些情况下,某些节点APIcallback将永远不会被调用。 节点如何知道何时退出该过程? 我的callback会不会在某些情况下被调用?

var net = require('net'); var client = net.connect({port: 8080}, function () {// first callback console.log('connected'); }); client.on('error', function () {// second callback console.log('error'); }); // end of script 

我尝试了上面的示例代码,该过程仍然会退出,即使它不能连接。 但是,第一个callback永远不会被调用。 在这种情况下,节点如何知道第一个callback函数可能不会被调用,所以这个过程仍然会退出,而不是挂在那里?

我的教育猜测是,这些callback是事件callback,所以他们不被视为正常的callback。 如果节点知道这些callback可能不会被调用,那么在某些情况下,在我的callback被调用之前,节点是否会退出进程? (既不“连接”也不打印“错误”)

有一个很好的答案在https://stackoverflow.com/a/7699579/8388

在你的示例代码中,如果你能够连接套接字,你的第一个callback将被执行,并且进程将会挂起,除非你或者服务器closures了套接字。 例如,如果你使用这个(假设你正在和端口8080上的HTTP服务器通信):

 var client = net.connect({port: 8080}, function () {// first callback console.log('connected'); client.write('GET /\n\n') }); 

服务器会向你发送一些数据,然后closures套接字。 在这一点上,你的进程将退出,因为它不再有一个打开的文件描述符。