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 時、午前 6 時、午前 8 時 30 分には何も起こりません。

console.log(s.next(2)) の出力を見ると、それらは常に正しいです。しかし、それらがさらに少し先の未来である場合、その時点では何も起こりません。

編集

さらにテストを行ったところ、アプリの実行方法に問題があったことが判明しました。Raspberry Pi で NOHUP を使用して実行します (他のケースでは動作しました)。何らかの理由で動作しません。次に、pm2を使用して同じコードを実行してみました。それは完璧に機能しました!

4

2 に答える 2

0

later.setIntervalスケジュール内で指定された時間に実行する関数を取ります:{}。この場合、switchLights(setting) は指定された時間に 3 回実行されます。つまり、毎日 02:00、06:00、08:30 です。

スケジュールオブジェクトを秒単位または最も近い時間で言及することをお勧めします.3つのスケジュールすべてが、指定された時間に定義された関数を実行していることがわかります(テスト用)。

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 に答える