本月我收到了来自Heroku的账单,令我惊讶。幸运的是,它只有几美元,但我并不认为我的使用率如此之高。我检查了账单,它说我上个月用了大约1000个小时。我简单地感到困惑,因为我的应用程序每小时运行几秒钟发送一些电子邮件,但后来我意识到这个过程并没有终止。
在评论出我的代码后,我确定该进程没有退出,因为我的mongoose数据库连接仍处于打开状态。但是我有几个嵌套回调数据库然后发送邮件以发送这些电子邮件,有时mailgun回调有自己的mailgun回调。如何跟踪这些并确保数据库最后关闭?
答案 0 :(得分:1)
我问我的JS忍者朋友,他说要用semaphores。这听起来令人生畏,但实际上非常容易。
npm install semaphore --save
包裹页面here。然后,对于我的每个数据库调用,我都这样做了:
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();
});
我想我可能会对正在发生的事情有更深入的了解,但现在这种做法很有用。