使用循环在Node.js中进行异步作业调度

阿南德

我有一个按时间间隔分组的JSON任务(请参阅参考资料unit),应该按every间隔将它们重复执行unit

 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

钒23

是的,如果您将星号(*)放在第二位,则在* * / 2 * * * *的情况下,任务将每隔奇数分钟执行一次。要每分钟运行一次任务,可以将秒数设置为0,而不是0 * / 2 * * * *。示例代码:

items = [{
    "unit": "minute",
    "detail": [{
        "every": 3,
        "task": "task1"
    }, {
        "every": 4,
        "task": "task2"
    }]
}, {
    "unit": "day",
    "detail": [{
        "every": 3,
        task: "task3"
    }, {
        "every": 4,
        task: "task4"
    }]
}];
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 = '0 */' + detail.every + ' * * * *';
            break;
        case 'hour':
            when = '0 0 */' + detail.every + ' * * *';
            break;
        case 'day':
            when = '0 0 0 0 */' + detail.every + ' *';
            break;
    }
    var job = new CronJob(when, function (when) {
            console.log(when);
         }, null, true, "GMT");
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Node.js异步请求在Redis中进行循环

来自分类Dev

使用Node.js异步请求在Redis中进行循环

来自分类Dev

使用Bull和Typescript进行作业调度

来自分类Dev

Node.js:如何使用异步模块执行无限循环

来自分类Dev

在不使用异步库帮助器类的情况下在node.js中异步进行for循环

来自分类Dev

使用异步作业在node.js / express中正常关闭

来自分类Dev

在JavaScript / node.js中使用A +进行While循环

来自分类Dev

使用HTTPClient在foreach中进行异步/等待

来自分类Dev

C#在foreach循环中进行异步http请求

来自分类Dev

Node.js异步循环,下一个循环之前从函数进行回调

来自分类Dev

Node.js异步循环,下一个循环之前从函数进行回调

来自分类Dev

避免使用node.js在rest api中进行缓存

来自分类Dev

使用此在node.js中进行类构造

来自分类Dev

使用For循环遍历异步功能(数据库查询,Node.js)

来自分类Dev

纯JavaScript +蓝鸟承诺异步for / while循环而无需使用NODE.JS

来自分类Dev

在node.js中异步循环

来自分类Dev

Node.js For循环异步请求

来自分类Dev

在node.js中使用回调循环

来自分类Dev

如何在Node.js中使用If语句和for循环?

来自分类Dev

在 node.js 中的 for 循环中使用类

来自分类Dev

For 循环不会使用 Node.js 结束

来自分类Dev

使用 mongoDB 调用/node.js 的 Foreach 循环

来自分类Dev

在 Node.js 中的 while 循环中使用 setTimeout

来自分类Dev

使用for循环格式化Node js数据

来自分类Dev

仅使用Node.js进行异步HTTP(S)遍历

来自分类Dev

在Node.js中使用异步瀑布进行函数迭代

来自分类Dev

在node.js中进行调试

来自分类Dev

在Node.js中使用Q.js Promise进行循环的正确方法

来自分类Dev

使用mkvmerge在bash中进行循环

Related 相关文章

热门标签

归档