Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js:程序意外退出或挂起_Javascript_Node.js_Asynchronous_Server Side_Node Async - Fatal编程技术网

Javascript node.js:程序意外退出或挂起

Javascript node.js:程序意外退出或挂起,javascript,node.js,asynchronous,server-side,node-async,Javascript,Node.js,Asynchronous,Server Side,Node Async,我在node.js中编写了一个模块来执行一些网络操作。我编写了一个使用此模块的小脚本(下面的变量check)。看起来是这样的: check(obj, function (err, results) { // ... console.log("Check completed"); }); 现在有一件有趣的事。当此代码作为mocha测试的一部分执行时,测试将按预期退出。我看到日志语句已打印,进程已退出 当代码作为独立节点脚本执行时,会打印log语句,但进程只是挂起 当我尝试调试它,

我在node.js中编写了一个模块来执行一些网络操作。我编写了一个使用此模块的小脚本(下面的变量
check
)。看起来是这样的:

check(obj, function (err, results) {
    // ...
    console.log("Check completed");
});
现在有一件有趣的事。当此代码作为
mocha
测试的一部分执行时,测试将按预期退出。我看到日志语句已打印,进程已退出

当代码作为独立节点脚本执行时,会打印log语句,但进程只是挂起

当我尝试调试它,并使用
--debug brk
节点检查器启动程序时,它会提前退出!我看到调用了
process.on“exit”
。它在模块内的一些内部回调尚未调用时退出。所以上面的日志语句也没有打印出来


我现在陷入困境,不知道为什么会发生这种情况。有人见过类似的行为吗?

当您将其作为脚本运行时,它在“完成”时挂起,这意味着节点仍有注册的回调等待事件。Node不知道这些事件将不再触发。如果知道该退出了,您可以调用
process.exit()
,也可以显式地关闭/取消绑定/断开所有连接(网络连接、数据库连接等)。若您正确地关闭了所有内容,那个么节点应该退出


模块(Nathan Arthur提到过)或可以非常有助于跟踪此问题。

如果程序意外退出,可能是因为事件循环变为空,没有其他事情可做(因为某些代码忘记发出错误或执行其他操作以保持事件循环继续)。在本例中,节点以代码0退出,您将不会得到任何错误消息,因此可能会非常混乱


有关这种情况的示例,请参阅。

是否有办法找出保持节点打开的原因?如果您有节点检查器,并且可以附加到流程并在节点的事件循环代码中设置断点,则可能。我从未成功地找到过其中一个。这要么是很明显的事情,比如打开DB连接但从不显式关闭它,要么就是我只做
process.exit()
,然后继续我的生活.process.\u getActiveHandles()和process.\u getActiveRequests()查看非常有用的提示!救了我!“为什么节点正在运行”似乎具有阻止其在节点5和/或请求模块上工作的功能。他为我工作。