Nodejs 定时器 later 怎么运行自己创建的 schedule

Nodejs 定时器 later 怎么运行自己创建的 schedule

代码如下。求指导。

var later = require('later');
later.date.localTime();

console.log("Now:"+new Date());

var basic = {h: [8,9,10,11,12,13,14,15,16,17], s: [0,15,30,45]};
var composite = [
    basic,
    {h: [18], m: [0]}
];
var exception = [
    {dw: [6,7]}
];
later.date.localTime();
var schedule = {
    schedules:composite,
    exceptions:exception
};

later.date.localTime();
var sched = later.schedule(schedule),
//var sched = later.parse.recur().on(schedu),
      t = later.setInterval(test, sched),
      count = 5;

  function test() {
    console.log(new Date());
    if(count <= 0) {
      t.clear();
    }
  }

4 回复

Node.js 定时器 later 怎么运行自己创建的 schedule

问题描述

最近我在使用 Node.js 的 later 库来设置定时任务,但遇到了一些困惑。希望有经验的朋友能够提供一些指导。

示例代码

var later = require('later');

// 设置本地时间
later.date.localTime();

// 输出当前时间
console.log("Now:" + new Date());

// 基础定时规则
var basic = { h: [8, 9, 10, 11, 12, 13, 14, 15, 16, 17], s: [0, 15, 30, 45] };

// 复合定时规则
var composite = [
    basic,
    { h: [18], m: [0] } // 每天18点整
];

// 异常规则(周六、周日不执行)
var exception = [
    { dw: [6, 7] } // 周六、周日
];

// 创建调度计划
var schedule = {
    schedules: composite,
    exceptions: exception
};

// 使用创建的调度计划
var sched = later.schedule(schedule);

// 设置定时器并开始执行
var t = later.setInterval(test, sched);
var count = 5;

function test() {
    console.log(new Date());
    if (count <= 0) {
        t.clear(); // 当计数小于等于0时停止定时器
    }
}

解释

  1. 导入 later

    var later = require('later');
    
  2. 设置本地时间

    later.date.localTime();
    

    这一步是为了确保定时器的时间与系统本地时间保持一致。

  3. 定义定时规则

    • basic 规则定义了每天8点到17点之间每小时的0分、15分、30分、45分这四个时间点。
    • composite 规则在 basic 规则的基础上增加了每天18点整的执行。
    • exception 规则指定了周六和周日不执行。
  4. 创建调度计划

    var schedule = {
        schedules: composite,
        exceptions: exception
    };
    
  5. 创建定时器并开始执行

    var t = later.setInterval(test, sched);
    

    这里使用 later.setInterval 方法根据之前定义的 schedule 来安排 test 函数的执行。

  6. 测试函数

    function test() {
        console.log(new Date());
        if (count <= 0) {
            t.clear();
        }
        count--;
    }
    

    test 函数会在指定的时间点被调用,并且会输出当前时间。当计数 count 小于等于0时,定时器将停止。

通过上述步骤,你可以利用 later 库在 Node.js 中创建复杂的定时任务,并根据需要进行调整。


格式化代码请使用 ```js\n 代码 \n``` 的语法, pre 不建议使用. 另外这段代码楼主碰到的是什么问题?

later.setInterval(test, sched),

已经运行了啊…

later.setTimeout(function() {}, sched) // 运行一次.
later.setInterval(test, sched),  //一直运行

在这个例子中,你已经使用了 later 库来创建了一个定时器,并设置了一个将在每天特定时间运行的计划。下面是对你提供的代码的一些解释和调整,以确保它能正确运行:

var later = require('later');

console.log("Now:" + new Date());

var basic = { h: [8, 9, 10, 11, 12, 13, 14, 15, 16, 17], s: [0, 15, 30, 45] };
var composite = [
    basic,
    { h: [18], m: [0] }
];
var exception = [
    { dw: [6, 7] } // 周六和周日不运行
];

later.date.localTime(); // 设置为本地时间

var schedule = {
    schedules: composite,
    exceptions: exception
};

function test() {
    console.log(new Date());
}

// 创建一个计时器,每5次循环后停止
var count = 5;
var t = later.setInterval(test, schedule, function () {
    if (count <= 0) {
        t.clear();
    } else {
        count--;
    }
});

解释:

  1. later.date.localTime() - 这行代码设置了日期对象使用本地时间,而不是UTC时间。
  2. basiccomposite - 定义了每天的时间表,即在8点到17点之间每15分钟一次,以及在18点整一次。
  3. exception - 定义了排除规则,这里表示周六和周日不执行任务。
  4. later.schedule(schedule) - 创建了一个根据 schedule 定义的时间表。
  5. later.setInterval(test, schedule) - 每次触发都会调用 test 函数,并根据 schedule 中定义的时间表执行。
  6. t.clear() - 当计数器 count 小于或等于0时,停止定时器。

这样配置后,你的定时器会在定义的时间段内按指定频率运行,并且不会在周末运行。

回到顶部