Node.js 节点JS在一系列函数调用后未终止

Node.js 节点JS在一系列函数调用后未终止,node.js,error-handling,try-catch,freeze,function-calls,Node.js,Error Handling,Try Catch,Freeze,Function Calls,我的代码结构如下: A(); function A() { try { // something that can generate an error console.log('\nIn A()'); B(); } catch (e) { console.log(e); } } function B() { try { console.log('\nIn B()');

我的代码结构如下:

    A();

function A() {
    try {
        // something that can generate an error
        console.log('\nIn A()');
        B();
    } catch (e) {
        console.log(e);
    }
}

function B() {
    try {
        console.log('\nIn B()');
        C()
    } catch (e) {
        console.log(e);
    }
}

function C() {
    try {
        console.log('\nIn C()');
    } catch (e) {
        console.log(e)
    }
}
我观察到的是,如果生成异常,它将进入catch块,打印console.log。但不会终止代码。我已经读到catch不会终止,但是既然控件没有转移到其他地方,为什么进程会挂起?我还尝试创建一个记录错误并从catch块调用的函数。它进入函数并再次挂起


我不熟悉节点JS中的错误处理。任何帮助都将不胜感激

您提供的代码运行无误

A();
函数A(){
试一试{
//可能产生错误的东西
console.log('\nina()');
B();
}捕获(e){
控制台日志(e);
}
}
函数B(){
试一试{
console.log('\ninb()');
C()
}捕获(e){
控制台日志(e);
}
}
函数C(){
试一试{
console.log('\ninc()');
}捕获(e){
控制台日志(e)
}

}
它与级联函数调用无关。这是因为用于从命令行获取用户输入的读取流未关闭。如果流保持打开状态或任何异步调用尚未完成,则节点不会终止。

这只是一个示例。比方说,我正在读取函数a的try块中的一个文件。如果我给出了错误的路径,它将进入catch。该实用程序在catch中打印错误后挂起。如何调试此类问题?您可以使用
进程退出节点应用程序。退出(0)
进程。退出(1)
(分别无错误或有错误)或使用
进程。kill()
。我只想调试它挂起的原因。正如您提到的,它在这里运行,但在我的实用程序中,它具有类似的结构,它挂起。理想情况下,它应该在catch中打印控制台后终止。但事实并非如此。你知道问题是什么吗?可能的原因是什么(我猜某个地方有漏洞。我在函数调用中运行了大量异步代码,涉及文件读取和写入。可能流没有关闭。目前,我已修复了process.exit()。当我将该代码粘贴到一个文件(比如
test.js
并运行
node test.js
)时,我会打印控制台日志并终止进程。那么,这里有什么问题?