Fetz: Probleme mit setTimeout in Schleife

Beitrag lesen

Hallo zusammen,

erstmal ganz herzlichen Dank. Es klappt jetzt einwandfrei!
Es tut mir leid, falls ich unbeabsichtigt jemanden verärgert haben sollte.

Struppi hat recht:

Es weiß ja keiner was du machst, was ist i was ist j und was sollen diese Variabeln darstellen oder erreichen?

Ich dachte einfach, es ist sinnvoll, nicht den ganzen Code zu posten, sondern nur den Kern meines Problems. Der fertige Code sieht an der Problemstelle jetzt etwa so aus:

 auslesen();  
  
function auslesen(i,j) {  
  var callback = function(p1, p2) {  
    return function() {  
      // In Rechnungsansicht gehen  
      window.open("http://www.HomepagemeinesAnbieters.de?Rechnungsnummer=" +Rechnungsnummer[p1], "_self");  
      // Rufnummerninformationen aufrufen  
      window.open("http://www.HomepagemeinesAnbieters.de/Uebersicht?Rechnungsnummer=" +Rechnungsnummer[p1], "_self");  
      // Rufnummer auswählen  
      window.open("http://www.HomepagemeinesAnbieters.de/Uebersicht?Rechnungsnummer=" +Rechnungsnummer[p1] + "&Rufnummer=" + Rufnummern[p2] + "&MarkierteRufnummer=" + Rufnummern[p2] + "&GewaehlteNummer=true", "_blank");  
      // Download Rufnummerninformation  
      window.open("http://www.HomepagemeinesAnbieters.de/Uebersicht?Rechnungsnummer=" +Rechnungsnummer[p1] + "&Rufnummer=" + Rufnummern[p2] + "&exportReport=Uebersicht&ReportType=csv", "_self");  
      // Rufnummerninformation aufrufen  
      window.open("http://www.HomepagemeinesAnbieters.de/Details?Rechnungsnummer=" +Rechnungsnummer[p1], "_blank");  
      // Download Einzelverbindungsnachweis  
      window.open("http://www.HomepagemeinesAnbieters.de/Details?Rechnungsnummer=" +Rechnungsnummer[p1] + "&Rufnummer=" + Rufnummern[p2] + "&exportReport=Details&ReportTyp=csv", "_self");  
      auslesen(p1, p2);  
    }  
  };  
  
  if (typeof j == 'undefined') {  
    i = 0;  
    j = -1;  
  }  
  if (i < (NummernProRechnung.length)) {  
    if (j < (NummernProRechnung[i]-1)) {  
      j++;  
      window.setTimeout(callback(i, j) ,5000);  
    } else {  
      j = 0;  
      i++;  
      if (i < (NummernProRechnung.length)) {  
        window.setTimeout(callback(i, j), 5000);  
      }  
    }  
  }  
} 

Zuvor lese ich noch per Script die entsprechenden Rechnungsnummern für den entsprechenden Rechnungszeitraum aus (daher Greasemonkey). Außerdem liegen Arrays vor, in denen die Rechnungskonten und die Rufnummern drinstehen.

Es kommt einem wirklich vor, als wüsstest du selbst nicht, was du eigentlich erreichen willst. Mit deinem ursprünglichen Code

Durchaus möglich, dass mein Kurs zum Ziel eher ein Slalomkurs als eine gerade Linie war. Das liegt einfach daran, dass ich (mehr oder weniger) für jede Codezeile einmal im selfhtml-Archiv recherchieren muss.
Ich kann mir auch vorstellen, dass beim Anblick meines Codes zahlreiche Leute eine viel bessere und elegantere Lösung gefunden hätten.
Allerdings bin ich mit der jetzigen Lösung zufrieden, weil ich das Gefühl habe, dass ich den Code jetzt auch wirklich verstanden habe und beim nächsten Mal darauf aufbauen kann.

Wenn ich was dazulernen kann, bin ich aber gerne bereit, mich da tadeln zu lassen :-)

Also nochmals ganz herzlichen Dank an Euch!

Gruß, Fetz