Hallo,
Wenn ich irgendeine Javascript-Funktion
regelmäßig in bestimmte Zeitabständen
mit setTimeout ausführen möchte, dann
funktioniert das leider nicht so, wie ich's
gerne möchte. Zuerst hab' ich's mit
folgendem Script versucht:
<script language="JavaScript">
<!--
for(var i = 0; i <= 1000; i++)
window.setTimeout("irgendwas()",100);
//-->
</script>
Das Problem ist aber, daß dabei nur eine
einzige (keine wiederholte) Verzögerung
von 100 mS stattfindet. Wie es aussieht
wird so die ganze For-Schleife sofort
1000 mal durchlaufen, und 100 mS später
wird 1000 mal die Funktion aufgerufen.
Daraufhin hab' ich's mit folgender Änderung
probiert:
<script language="JavaScript">
<!--
for(var i = 0; i <= 1000; i++)
window.setTimeout("irgendwas()",100*i);
//-->
</script>
So funktioniert's zwar, aber es gibt andere
Probleme. Ich wollte hinter die For-Schleife
noch einen weiteren Befehl setzen, der erst
nach den 1000 Timeouts ausgeführt werden
sollte, aber er wurde sofort ausgeführt.
Anscheinend finden auch hier die 1000
Schleifen-Durchläufe sofort statt, wobei
der Computer die ganzen Daten für die
1000 planten Funktionsaufrufe sich
anscheinend irgendwie merkt und dann
gleich mit dem Script fortfährt, bevor
die ganzen Funktionsaufrufe stattfinden.
Da denke ich, das könnte den PC schnell
überfordern, wenn man z.B. die Zahl der
Schleifen-Durchläufe noch deutlich erhöht.
Nun meine Fragen:
Gibt es eine Möglichkeit, die den Browser
dazu veranlasst die Timeout-Zeit jeweils
abzuwarten, bevor das Script weiter gelesen
und ausgeführt wird? (Also ähnlich, wie z.B.
bei "alert" das Script ja auch erst weiter
ausgeführt wird, wenn man die Meldung
bestätigt hat.) Eine Art Wait-Befehl gibt
es ja bei JS nicht, aber vielleicht kann man
sowas ja irgendwie simulieren?
Wie ich gesehen habe, macht man das manchmal
über Funktionen, die sich selbst aufrufen, aber
das soll ja auch nicht so optimal sein, da für jeden
weiteren Funktionsaufruf zusätzlicher Speicherplatz
verbraucht wird, und nach meinen Überlegungen
müßten solche Scripte grundsätzlich nach einiger
Zeit abstürzen, denn jeder Funktionsaufruf ist ja
ein kleines Unterprogramm, und so werden dann
ja endlos viele Unterprogramme inneinander
verschachtelt. (Vor allem wenn die Anzahl nicht
wie in meinem Beispiel auf 1000 begrenzt wird.)
Wie sieht nun die korrekte Lösung aus, um eine
Funktion immer wieder periodisch in konstanten
Zeitabständen aufzurufen?
Für Eure Hilfe im Vorraus besten Dank.
Bye, Robert