我对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
我尝试了上面的示例代码,该进程仍然会退出,即使它无法进行连接。但是,第一个回调永远不会被调用。在这种情况下,节点如何知道第一个回调可能不会被调用,所以进程仍然会退出而不是只挂在那里?
我有根据的猜测是,那些回调是事件回调,因此它们不被视为正常的回调。如果节点知道这些回调可能没有被调用,那么在某些情况下,在我的回调都没有被调用之前,该节点是否会退出该进程? (既不'连接',也不打印'错误')
答案 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')
});
服务器会向您发送一些数据,然后关闭套接字。此时,您的进程将退出,因为它不再具有打开的文件描述符。