NodeJS 回调:跟踪数据库调用,以便我可以终止进程
Posted
技术标签:
【中文标题】NodeJS 回调:跟踪数据库调用,以便我可以终止进程【英文标题】:NodeJS callbacks: tracking db calls so I can terminate the process 【发布时间】:2014-01-27 11:18:12 【问题描述】:这个月我收到了 Heroku 的账单,这让我很吃惊。幸运的是,它只有几美元,但我没想到我的使用率这么高。我检查了账单,上面说我上个月用了大约 1000 小时。我有点困惑,因为我的应用程序每小时只运行几秒钟以发送一些电子邮件,但后来我意识到这个过程并没有终止。
在注释掉我的大量代码后,我确定该进程不会退出,因为我的 mongoose 数据库连接仍处于打开状态。但是我有几个嵌套回调到数据库,然后到 mailgun 以发送这些电子邮件,有时 mailgun 回调有自己的 mailgun 回调。如何跟踪这些并确保最后关闭数据库?
【问题讨论】:
【参考方案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();
);
我想我可能可以对正在发生的事情进行更深入的了解,但这目前正在奏效。
【讨论】:
以上是关于NodeJS 回调:跟踪数据库调用,以便我可以终止进程的主要内容,如果未能解决你的问题,请参考以下文章