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

时间:2016-06-22 02:49:32

标签: node.js

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

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

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

我有根据的猜测是,那些回调是事件回调,因此它们不被视为正常的回调。如果节点知道这些回调可能没有被调用,那么在某些情况下,在我的回调都没有被调用之前,该节点是否会退出该进程? (既不'连接',也不打印'错误')

1 个答案:

答案 0 :(得分:1)

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

在您的示例代码中,如果您能够连接套接字,则第一个回调将执行,并且进程将挂起,除非您或服务器关闭套接字。例如,如果您使用此代码(假设您正在与端口8080上的HTTP服务器通信):

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

服务器会向您发送一些数据,然后关闭套接字。此时,您的进程将退出,因为它不再具有打开的文件描述符。