我知道这种问题已经被一遍又一遍地问过(我在 Stackoverflow 和其他地方读过很多遍)。我尝试了闭包、匿名函数等,但我什么也没得到,因为我不是代码大师):。
话虽如此,这是我的问题:
function A (a) {
for (var i in a) {
var x = a[i];
function B (x); // wait for the end of the function B before next loop
}
}
……
function B (x) {
//do things with "x" and repeat the function B until a condition is true and then return to the function A
}
我尝试了很多东西(可能还不够),但没有一个能正常工作......
所以提前谢谢你的建议
问候
编辑 :
好的,这里有完整的代码:
var Test = {
......
setProgress: function(count) {
var win = Test.getMainWindow();
var progressMeter = win.document.getElementById("progressMeter");
progressMeter.value = count;
},
cancelCheck: function(event) {
var win = Test.getMainWindow();
win.document.getElementById("cancel").value = "cancel";
},
timeout: function (item) {
var win = Test.getMainWindow();
win.document.getElementById("progressMeterText").value = item;
var stat = Test.getStatus()
if (stat !== "loading" || win.document.getElementById("cancel").value == "cancel") {
// if cancel button is clicked
if (win.document.getElementById("cancel").value == "cancel") {
Test.setProgress(100);
Test.stop();
win.document.getElementById("cancel").value = "";
win.document.getElementById("progressMeter").collapsed=true;
win.document.getElementById("cancel").hidden=true;
win.document.getElementById("progressMeterText").hidden=true;
}
// end of the loading
else if (stat !== "loading") {
Test.setProgress(100);
win.document.getElementById("progressMeter").collapsed=true;
win.document.getElementById("cancel").hidden=true;
win.document.getElementById("progressMeterText").hidden=true;
win.document.getElementById("cancel").value = "";
}
// loading is running
else {
count = count+5;
if (count == 100) {
count = 0;
}
Test.setProgress(count);
setTimeout (Test.timeout, 100 , item);
}
}
},
getStuff: function (items) {
for(var i in items) {
var item = items[i];
if (!item.host || (items && item.id != items)) continue;
var listener = new Test.GetListener(item);
listener.instance = new TestGet(item, listener).execute();
count = 10;
Test.setProgress(count);
var buttoncancel = win.document.getElementById("cancel");
buttoncancel.addEventListener ('click', Test.cancelCheck, false);
Test.timeout(item);
.....
}
.....
}
}