NodeJScallback:跟踪数据库调用,所以我可以终止进程

这个月我从Heroku收到一个账单,这令我感到意外。 幸运的是,只有几美元,但我认为我的使用率并不高。 我查了一下账单,说上个月我用了大约1000个小时。 我简单地感到困惑,因为我的应用程序每小时运行几秒钟发送一些电子邮件,但后来我意识到这个过程并没有终止。

在注释掉我的代码之后,我确定该进程不会因为我的mongoose数据库连接仍然打开而退出。 但是我有几个嵌套的callback数据库,然后mailgun发送这些电子邮件,有时mailguncallback有自己的mailguncallback。 我如何跟踪这些数据并确保数据库在最后closures?

我问我的JS忍者朋友,他说使用信号量 。 这听起来令人生畏,但实际上非常容易。

npm install semaphore --save 

打包页面在这里 。 然后,对于我的每个数据库调用,我都这样做了:

 sem.take(function () { Object.find({key: value}, function () { sem.leave(); // (I don't need the database anymore) // tons of other code }); }); 

然后我确信所有的代码在这之前运行:

 sem.take(function () { sem.leave(); db.close(); }); 

我想我可能会更深入地了解正在发生的事情,但现在这个工作正在进行。