【问题标题】:Later.js - Event not triggering on scheduled timeLater.js - 事件未在预定时间触发
【发布时间】:2016-06-28 15:41:21
【问题描述】:

我正在使用 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 运行相同的代码。效果很好!

【问题讨论】:

    标签: javascript laterjs


    【解决方案1】:

    later.setInterval 采用一个函数在您的日程表中提供的上述时间执行:{},在您的情况下 switchLights(setting) 将在指定时间执行 3 次,即 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);
    }
    

    【讨论】:

    • 我已经尝试过了,当时间是 13:10 时,带有注释行 (//schedule: { h: [13], m: [13]})。然后它执行得很好。似乎当未来的时间更长时,它永远不会因为某种原因触发......
    • 不确定我是否理解你的问题“我的行为很奇怪,如果我将日程安排及时提前一点,它会起作用。但是当我使用时间时,我真的会喜欢有,在那些时间段什么都没有发生。” 但是你的代码对我来说很完美,看看link1
    • 非常感谢您帮助我。我现在做了进一步的测试,结果证明,这是我运行应用程序的问题。我在 Raspberry Pi 上使用 NOHUP 运行它(在其他情况下也有效)。由于某种原因,这不起作用。然后我尝试使用 pm2 运行相同的代码。效果很好!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2013-08-31
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多