Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS回调:跟踪数据库调用以便可以终止进程_Node.js_Heroku_Mongoose_Semaphore - Fatal编程技术网

Node.js NodeJS回调:跟踪数据库调用以便可以终止进程

Node.js NodeJS回调:跟踪数据库调用以便可以终止进程,node.js,heroku,mongoose,semaphore,Node.js,Heroku,Mongoose,Semaphore,这个月我收到了Heroku的账单,这让我很惊讶。幸运的是,它只花了几美元,但我认为我的使用率并没有那么高。我查了一下账单,上面说我上个月用了大约1000个小时。我有点困惑,因为我的应用程序每小时只运行几秒钟来发送一些电子邮件,但后来我意识到这个过程并没有终止 在注释了大量代码之后,我确定进程不会退出,因为我的mongoose数据库连接仍然处于打开状态。但我有几个嵌套的回调到数据库,然后到mailgun发送这些电子邮件,有时mailgun回调有自己的mailgun回调。我如何跟踪这些信息并确保数据

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


在注释了大量代码之后,我确定进程不会退出,因为我的mongoose数据库连接仍然处于打开状态。但我有几个嵌套的回调到数据库,然后到mailgun发送这些电子邮件,有时mailgun回调有自己的mailgun回调。我如何跟踪这些信息并确保数据库最终关闭?

我问我的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();
});
我想我可能需要对正在发生的事情有更深入的了解,但现在这是可行的