この種の質問が何度も出されていることは知っています (私は 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);
.....
}
.....
}
}