0

我正在使用 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:00、早上 6:00 和早上 8:30 什么都没有发生。

查看 console.log(s.next(2)) 打印输出,它们总是正确的。但是在那些时候什么都不会发生,如果他们在未来更远一点的话。

编辑

我现在做了进一步的测试,结果证明,这是我如何运行应用程序的问题。我在 Raspberry Pi 上使用 NOHUP 运行它(在其他情况下也有效)。由于某种原因,这不起作用。然后我尝试使用pm2运行相同的代码。效果很好!

4

2 回答 2

0

我对 laterjs 也有同样的问题。原因是它计算时间段的方式不正确。要解决这个问题,只需later.date.localTime()在您的代码之前添加。

于 2016-06-27T20:36:54.337 回答
0

later.setInterval采用一个函数在您的日程表中提供的上述时间执行:{},在您的情况下 switchLights(setting) 将在指定时间执行三次,即每天 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);
}
于 2015-12-31T08:08:44.870 回答