我正在使用Later.js,并尝试将setInterval
用于日程安排。我的行为很奇怪,如果我把时间表设置得有点前进,那就行了。但是,当我使用我真正想要的时间时,在这些时间段没有任何事情发生。我无法弄清楚出了什么问题。
"use strict";
var settings = require('./settings');
var later = require('later');
later.date.localTime();
console.log("ProjectTwo started.");
createEvents();
function createEvents() {
settings.eventSettings.forEach(function(setting) {
if (typeof setting.schedule === 'object' ) {
var schedule = { schedules: [ setting.schedule ] };
later.setInterval(function() { switchLights(setting) } , schedule);
console.log(s.next(2));
}
});
}
function switchLights(setting) {
console.log((new Date()).toLocaleString() + " " + setting.name);
}
//switchLights(settings.eventSettings[0]);
和设置:
"use strict";
var settings = {
eventSettings: [
{
id: 1,
schedule: { h: [2], m: [0]},
//schedule: { h: [16], m: [16]},
name: "One",
},
{
id: 2,
schedule: { h: [6], m: [0]},
//schedule: { h: [16], m: [9]},
condition: "if_dark",
name: "Two",
},
{
id: 3,
schedule: { h: [8], m: [30]},
//schedule: { h: [16], m: [10]},
name: "Three",
}
]
};
module.exports = settings;
如果我切换已注释的schedule
行,它就可以了!但是当我使用未注释掉的行(我真正想要的那些行)时,凌晨2点,早上6点和早上8点30分都没有发生任何事情。
查看console.log(s.next(2))打印输出,它们始终是正确的。但是在那个时候没有任何事情发生,如果它们是未来的一部分。
我现在已经进行了一些测试,结果证明,这是我运行应用程序的一个问题。我在Raspberry Pi上使用NOHUP运行它(在其他情况下也有效)。由于某种原因,这是行不通的。然后我尝试使用pm2运行相同的代码。这很完美!
答案 0 :(得分:0)
later.setInterval
需要一个函数在你的日程表中提供的上述时间执行:{},在你的情况下,switchLights(设置)将在指定的时间执行三次,即02:00,06:00,每天08:30
我建议您在几秒钟或最近的时间内提及计划对象,并且您将在给定时间看到执行您定义的功能的所有三个计划 (用于测试)
var later = require('later');
later.date.localTime();
var settings = {
eventSettings: [
{
id: 1,
schedule: { s: [10]},
//schedule: { h: [13], m: [13]},//mention your closest time
name: "One"
},
{
id: 2,
schedule: { s: [26]},
//schedule: { h: [13], m: [14]},
//condition: "if_dark",
name: "Two"
},
{
id: 3,
schedule: { s: [48]},
//schedule: { h: [13], m: [15]},
name: "Three"
}
]
};
console.log("ProjectTwo started.");
createEvents();
function createEvents() {
settings.eventSettings.forEach(function(setting)
{
if (typeof setting.schedule === 'object' )
{
var schedule = { schedules: [ setting.schedule ] };
later.setInterval(function() { switchLights(setting) } ,schedule)
}
});
}
function switchLights(setting)
{
console.log((new Date()).toLocaleString() + " " + setting.name);
}
答案 1 :(得分:0)
我和laterjs有同样的问题。
原因在于它如何不正确地计算时间段。
要解决此问题,只需在代码前添加later.date.localTime()
即可。