forループを一時停止し、指定するまで続行する必要があります。私がループしている配列の各項目については、別々のデバイスで操作を実行するコードを実行し、配列の次の項目にループする前にその操作が完了するまで待つ必要があります。指定されるまでJavascript for-loopを続行しないでください
幸いにも、そのコード/操作はカーソルであり、after:
セクションがあります。
しかし、ループ全体を瞬時に実行していましたが、これを防止する必要があります。ループが指定されるまで継続しないようにする方法はありますか?あるいは、私が使うはずの別の種類のループか何か?
私の最初の(悪い)考えは、カーソルのafter:
部分がboolean
からtrue
になるまで、連続して実行されるfor-loop内でwhileループを作ることでした。私はそれは私が行うことができます。
何?私はJavaScriptにかなり新しいんだだろう恐れていたよう。私も私の現在のプロジェクトを楽しんできましたこれはちょうど:(ブラウザをロックアップ。
ここwhile-loop
試みです。私はdataCounter
は、(現在のアレイに2つの項目)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++;
}
}
あなたがしようとしているいくつかのコードを投稿:あなたの本当のコードでは、このようなものになるだろう。あなたが行ったこととなぜそれが機能していないのかを示す実際のコードがあれば、人々はもっと助けてくれるでしょう。 –
したがって、for-loopの本体は非同期タスクでなければなりませんか? – Bergi