Ich muss eine for-Schleife anhalten und nicht weiter, bis ich angeben. Für jedes Element im Array, das ich durchlaufe, führe ich Code aus, der einen Vorgang auf einem separaten Gerät ausführt, und ich muss warten, bis dieser Vorgang beendet ist, bevor ich zum nächsten Element im Array übergebe.Fortsetzung nicht Javascript for-Schleife bis angegeben
Glücklicherweise ist dieser Code/Vorgang ein Cursor und verfügt über einen after:
Abschnitt.
Allerdings hat es die gesamte for-Schleife sofort ausgeführt, was ich verhindern muss. Gibt es eine Möglichkeit, zu verhindern, dass die Schleife fortgesetzt wird, bis sie spezifiziert wird? Oder vielleicht eine andere Art von Schleife oder etwas, das ich verwenden sollte?
Meine erste (schlecht) Idee war, eine while-Schleife in der for-Schleife zu bilden, die kontinuierlich lief, bis der after:
Teil des Cursors zu einem boolean
true
gesetzt. Dies ist nur der Browser gesperrt :(Da ich befürchtete, es würde.
Alles, was ich tun kann? Ich Javascript ziemlich neu bin. Ich habe allerdings mein aktuelles Projekt genossen.
Hier ist der while-loop
Versuch. ich weiß, es sofort die gesamte Schleife läuft, weil die dataCounter
1
-3
(zwei Elemente im Array zur Zeit) geht sofort:
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++;
}
}
Beitrag einige Code, den Sie haben versucht: Mit Ihrem echten Code es so etwas wie dieses wäre. Die Leute werden eher bereit sein zu helfen, wenn Sie tatsächlich Code haben, der zeigt, was Sie getan haben und warum es nicht funktioniert. –
Also sollte der Körper der for-Schleife eine asynchrone Aufgabe sein? – Bergi