node.js - NodeJS 回调 : tracking db calls so I can terminate the process

标签 node.js heroku mongoose semaphore

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

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

最佳答案

我问了我的JS忍者 friend ,他说用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();
});

我想我可能需要更深入地了解正在发生的事情,但目前这是有效的。

关于node.js - NodeJS 回调 : tracking db calls so I can terminate the process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21011193/

相关文章:

javascript - RegExp 不会产生预期的结果,但它在其他地方都会产生

ruby-on-rails - 将域重定向到heroku中的名称服务器?

node.js - 更新mongoDB文档需要两次

Mongodb版本不匹配问题3.6到4.0升级

mongoose - 使用 SCRAM-SHA-1 在 Mongoose 中进行身份验证

javascript - Node 集群 : Why are all requests handled by only one worker?

javascript - Node.js:Module.exports 中的变量是全局的吗?

javascript - 更改为 .ejs 后 Azure 上的路由中断

ruby-on-rails - 在Heroku Deploy上清除Memcached

heroku - 设计在本地工作但不在heroku上工作