我想安排一个每三秒运行一次的功能,直到我的应用程序退出。我没有使用setInterval,因为如果出现问题就不应再安排了,所以我使用setTimeout 我写了这样的东西
function someWork(){
setTimeout(function(){
//do Stuff here
someWork();
},3000)
}
会导致任何内存或性能泄漏。或者有更好的解决方案吗?
答案 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-cron或agenda,但那些内部也使用setTimeout
,因此如果您不需要任何外部库,那么使用它就没有意义其他功能。
你已经知道setInterval
的两个陷阱:
“递归”setTimeout
不会导致内存泄漏或堆栈溢出。参见例如Will a recursive 'setTimeout' function call eventually kill the JS Engine?