我需要暫停一個for循環,並不會繼續,直到我指定。對於我正在循環的數組中的每個項目,我運行一些代碼以在單獨的設備上運行操作,並且需要等到該操作完成後才循環到數組中的下一個項目。不要繼續JavaScript for循環直到指定
幸運的是,該代碼/操作是一個遊標,並具有after:
部分。
但是,它一直在運行整個for循環,這是我需要防止的。有什麼方法可以防止循環繼續,直到指定?或者也許是一種不同類型的循環或我應該使用的東西?
我的第一個想法是在連續運行的for循環中創建一個while循環,直到光標的after:
部分設置爲boolean
至true
。這只是鎖定了瀏覽器:(正如我擔心它會。
什麼我能做什麼?我是相當新的JavaScript。我已經受夠了享受我的當前項目。
這裏是while-loop
嘗試。我知道它會立即運行整個循環,因爲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++;
}
}
發佈一些代碼,您都試過了。如果你有實際的代碼顯示你已經完成了什麼以及爲什麼它不工作,人們會更願意提供幫助。 –
因此,for-loop的主體應該是一個異步任務? – Bergi