Muszę wstrzymać pętlę for i kontynuować, dopóki nie określę. Dla każdego elementu w tablicy, którą przeglądam, uruchamiam kod, który uruchamia operację na oddzielnym urządzeniu i muszę poczekać, aż ta operacja zostanie zakończona, zanim przejdzie do następnego elementu w tablicy.Nie kontynuuj JavaScript pętli for dopóki nie zostanie podana
Na szczęście ten kod/operacja jest kursorem i zawiera sekcję after:
.
Jednak od razu uruchomiono całą pętlę for, której muszę zapobiec. Czy jest jakiś sposób, aby uniemożliwić kontynuowanie pętli, dopóki nie zostanie podana? A może inny rodzaj pętli lub coś, co powinienem użyć?
My pierwszy (słaba) Chodziło o to, aby w pętli while w pętli for biegnący w sposób ciągły, aż część after:
kursora ustawić boolean
do true
. To właśnie zamknął przeglądarkę :(jak się obawiałem, że będzie.
mogę coś zrobić? Jestem całkiem nowy, javascript. Byłem ciesząc się mój aktualny projekt chociaż.
Oto while-loop
próba. wiem, że natychmiast uruchomiony całą pętlę ponieważ dataCounter
idzie z 1
do 3
(dwie pozycje w tablicy obecnie) natychmiast:
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++;
}
}
post jakiś kod, który próbowałeś. Ludzie będą bardziej chętni do pomocy, jeśli masz rzeczywisty kod pokazujący, co zrobiłeś i dlaczego nie działa. –
Ciało pętli for powinno być więc zadaniem asynchronicznym? – Bergi