Ho bisogno di mettere in pausa un ciclo for e non continuare fino a quando non lo specifichi. Per ogni elemento dell'array che sto trasmettendo, eseguo del codice che esegue un'operazione su un dispositivo separato, e devo aspettare che l'operazione sia terminata prima di eseguire il ciclo sull'elemento successivo nell'array.Non continuare Javascript for-loop fino a quando specificato
Fortunatamente, quel codice/operazione è un cursore e presenta una sezione after:
.
Tuttavia, è stato eseguito l'intero ciclo for all'istante, che ho bisogno di prevenire. C'è un modo per impedire che il ciclo continui fino a quando specificato? O forse un diverso tipo di loop o qualcosa che dovrei usare?
mia prima (scarso) idea era di fare un ciclo while all'interno del ciclo for che correva continuamente, finché la parte after:
del cursore impostato un boolean
a true
. Questo appena chiuso il browser :(Come ho temuto.
Posso fare qualcosa? Sono abbastanza nuovo per javascript. Sto godendo il mio progetto attuale però.
Ecco il tentativo while-loop
. lo so che è in esecuzione l'intero ciclo immediatamente perché il dataCounter
va da 1
a 3
(due voci nella matrice attualmente) all'istante:
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++;
}
}
postale del codice che avete provato. Le persone saranno più disponibili ad aiutare se hai codice reale che mostra ciò che hai fatto e perché non funziona. –
Quindi, il corpo del ciclo for dovrebbe essere un task asincrono? – Bergi