toschedule如何在节点js中继续运行功能?

时间:2016-02-24 15:56:42

标签: node.js

我想安排一个每三秒运行一次的功能,直到我的应用程序退出。我没有使用setInterval,因为如果出现问题就不应再安排了,所以我使用setTimeout 我写了这样的东西

function someWork(){
   setTimeout(function(){
     //do Stuff here
     someWork();
},3000)
}

会导致任何内存或性能泄漏。或者有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

在后端自动执行任务的最佳方法是使用cron作业。这是一个救援模块node-cron。这是一个例子 -

var CronJob = require('cron').CronJob;
var job = new CronJob('*/3 * * * * *', function() {
  /*
   * Runs every 3 seconds as long as your server is running
   */
  }, function () {
    /* This function is executed when the job stops */
  },
  true, /* Start the job right now */
  timeZone /* Time zone of this job. */
);

答案 1 :(得分:0)

是的,setTimeout是可行的方法。您可以使用外部库,例如已经提及的node-cronagenda,但那些内部也使用setTimeout,因此如果您不需要任何外部库,那么使用它就没有意义其他功能。

你已经知道setInterval的两个陷阱:

  1. 忽略错误
  2. 它不关心任务是否需要超过执行间隔
  3. “递归”setTimeout不会导致内存泄漏或堆栈溢出。参见例如Will a recursive 'setTimeout' function call eventually kill the JS Engine?