Later.js - 事件未在预定时间触发

时间:2015-12-30 12:10:30

标签: javascript laterjs

我正在使用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运行相同的代码。这很完美!

2 个答案:

答案 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()即可。