我有一个JSON任务列表,根据它们应该重复的间隔(参见unit
),将任务分组。
每个任务应该按照unit
的间隔every
重复执行。
items=[
{
"unit" : "minute",
"detail" :
[
{"every" : 3, task : "task1"}
{"every" : 4, task : "task2"}...
]
},
{
"unit" : "day",
"detail" :
[
{"every" : 3, task : "task3"}
{"every" : 4, task : "task4"}...
]
},..
]
我使用了一个异步函数通过 node-cron 来安排任务在每个 every
unit
时间间隔内执行,例如:task1 应该每 3 分钟执行一次。
我尝试了以下代码:
var CronJob = require('cron').CronJob;
function cronify(callback)
{
for (var i in items)
{
for (var j in items[i].detail) {
callback(items[i].unit,items[i].detail[j]);
}
}
}
cronify(function (duration, detail) {
var when = '* * * * * *';
switch(duration)
{
case 'minute' :
when = '* */'+detail.every+' * * * *';
break;
case 'hour' :
when = '* * */'+detail.every+' * * *';
break;
case 'day' :
when = '* * * * */'+detail.every+' * *';
break;
}
var job = new CronJob(when, function () {
//Do the task for task
}, null, true, "GMT");
}
});
但问题是每个任务都会独立地每秒执行一次,而不考虑通过unit
和every
指定的持续时间。