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时停止定时器
}
}
解释
-
导入
later
库:var later = require('later');
-
设置本地时间:
later.date.localTime();
这一步是为了确保定时器的时间与系统本地时间保持一致。
-
定义定时规则:
basic
规则定义了每天8点到17点之间每小时的0分、15分、30分、45分这四个时间点。composite
规则在basic
规则的基础上增加了每天18点整的执行。exception
规则指定了周六和周日不执行。
-
创建调度计划:
var schedule = { schedules: composite, exceptions: exception };
-
创建定时器并开始执行:
var t = later.setInterval(test, sched);
这里使用
later.setInterval
方法根据之前定义的schedule
来安排test
函数的执行。 -
测试函数:
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--;
}
});
解释:
later.date.localTime()
- 这行代码设置了日期对象使用本地时间,而不是UTC时间。basic
和composite
- 定义了每天的时间表,即在8点到17点之间每15分钟一次,以及在18点整一次。exception
- 定义了排除规则,这里表示周六和周日不执行任务。later.schedule(schedule)
- 创建了一个根据schedule
定义的时间表。later.setInterval(test, schedule)
- 每次触发都会调用test
函数,并根据schedule
中定义的时间表执行。t.clear()
- 当计数器count
小于或等于0时,停止定时器。
这样配置后,你的定时器会在定义的时间段内按指定频率运行,并且不会在周末运行。