node.js を使用してプロジェクトに取り組んでいます。JSON データのチャンクを取り込み、受信したデータに基づいてシリアル ポートからデータを書き出すジョブをスケジュールする必要があります。このタスクにはnode-scheduleを使用しています。スケジュールする必要のあるジョブがいくつかあり、それぞれのコマンドは異なります。私が見つけたのは、scheduleJob
呼び出し内で関数に渡された引数が、for ループ内でスケジュールされたときではなく、実行時に解釈されることです。文字列引数を定数にする方法についてのアイデアはありますか?
コード例:
var schedule = require('node-schedule');
var schedules[];
…
var startrule = new schedule.RecurrenceRule();
var start_hour = thejson.start_hour;
var start_minute = thejson.start_minute;
for (var k = 0; k < thejson.zones.length; k++)
{
//start
startrule.hour = start_hour;
startrule.minute = start_minute;
var start = schedule.scheduleJob(startrule, function(){
writeSerial('//S' + thejson.zones[k].number + ',1');
});
schedules.push(start); //upon next json update, old schedules in array are cancelled.
}
実行すると不明なthejson.zones[k].number
ため失敗します。その文字列引数を静的/定数k
にするにはどうすればよいですか? writeSerial()
配列にくっつけてwriteSerial
スケジュール内にインデックスを渡そうとしたのですが、そのインデックス変数もスケジュール実行時に解釈されてしまいます。