for ループを一時停止し、指定するまで続行しないようにする必要があります。ループしている配列内の項目ごとに、別のデバイスで操作を実行するコードを実行します。配列内の次の項目にループする前に、その操作が完了するまで待機する必要があります。
幸いなことに、そのコード/操作はカーソルであり、after:
セクションを備えています。
ただし、 for ループ全体が即座に実行されているため、これを防ぐ必要があります。指定されるまでループが継続しないようにする方法はありますか? それとも、別のタイプのループか、使用する必要があるものでしょうか?
after:
私の最初の (貧弱な) アイデアは、カーソルの部分が に設定されるまで、継続的に実行される for ループ内に while ループを作成することでしboolean
たtrue
。これにより、ブラウザがロックされました:(私が恐れていたように。
私にできることはありますか?私はjavascriptにかなり慣れていません。しかし、私は現在のプロジェクトを楽しんでいます。
これがそのwhile-loop
試みです。から(現在配列内の2つのアイテム)に即座にdataCounter
移行するため、ループ全体がすぐに実行されていることがわかります。1
3
if(years.length>0){
var dataCounter = 1;
var continueLoop;
for(var i=0;i<years.length;i++){
continueLoop = false;
baja.Ord.make(historyName+"?period=timeRange;start="+years[i][1].encodeToString()+";end="+years[i][2].encodeToString()+"|bql:select timestamp, sum|bql:historyFunc:HistoryRollup.rollup(history:RollupInterval 'hourly')").get(
{
ok: function (result) {
// Iterate through all of the Columns
baja.iterate(result.getColumns(), function (c) {
baja.outln("Column display name: " + c.getDisplayName());
});
},
cursor: {
before: function () {
baja.outln("Called just before iterating through the Cursor");
counter=0;
data[dataCounter] = [];
baja.outln("just made data["+dataCounter+"]");
},
after: function () {
baja.outln("Called just after iterating through the Cursor");
continueLoop = true;
},
each: function () {
if(counter>=data[0].length) {
var dateA = data[dataCounter][counter-1][0];
dateA += 3600000;
}
else {
var dateA = data[0][counter][0];
}
var value=this.get("sum").encodeToString();
var valueNumber=Number(value);
data[dataCounter][counter] = [dateA,valueNumber];
counter++;
},
limit: 744, // Specify optional limit on the number of records (defaults to 10)2147483647
offset: 0 // Specify optional record offset (defaults to 0)
}
})
while(continueLoop = false){
var test = 1;
baja.outln("halp");
}
dataCounter++;
}
}