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

我在node.js中写了一个模块来执行一些networking操作。 我写了一个使用这个模块的小脚本(下面的variablescheck )。 它看起来像这样:

 check(obj, function (err, results) { // ... console.log("Check completed"); }); 

现在这是有趣的事情。 当此代码作为mochatesting的一部分执行时,testing按预期退出。 我看到打印的日志语句,并退出进程。

当代码作为独立节点脚本执行时,会打印日志语句,但该过程只是挂起。

当我尝试debugging它,并使用--debug-brk启动程序并使用node-inspector ,它会提前退出! 我看到process.on 'exit'被调用。 它退出,而模块内的一些内部callback尚未被调用。 所以上面的日志语句也不会被打印。

我现在卡住了,不知道为什么发生这种情况。 有没有人看过类似的行为?

当您将其作为脚本运行并在“完成”时挂起时,这意味着节点仍然有注册等待事件的callback。 节点不知道这些事件不会再发生。 你可以调用process.exit()如果你知道是时候退出,或者你可以明确地closures/取消绑定/断开连接(networking连接,数据库连接等)。 如果你closures了所有的东西,节点应该退出。

模块wtfnode (由Nathan Arthur提到)或为什么是节点运行可以真正有帮助的跟踪下来。