Marvin Esse: Problem mit Javascript While-Schleife

Guten Morgen,

ich habe in einer String erstmal nur den folgenden Text stehen: "2,7". Nun möchte ich den Aufruf einer Funktion solange wiederholen, bis der String leer ist. In der Funktion wird bei jedem Schritt ein Teil abgeschnitten, der String also immer kürzer, bis er leer ist.

		while (eq != "") {
			mach_die_welle();
		}

Die Funktion sieht so aus:

function mach_die_welle() {
		n = eq.indexOf(",");
		if (n == -1) {
			l = eq;
			eq = "";
		} else {
			l = eq.substring(0,n);
			eq = eq.substring(n+1);
		}
}

Das hatte im ersten Test augenscheinlich fehlerfrei funktioniert, aber dann wollte ich eine Verzögerung einbauen (und hab mir auch schon anzeigen lassen, wie oft er durch die While-Schleife läuft, Dummy ist ein einfaches Input-Feld):

		x = 0;
		while (eq != "") {
			x = x + 1;
			document.getElementById("dummy").value=x;
			setTimeout(function () { mach_die_welle(); }, 100);
		}

Der Zähler stieg auf: 757756 !!! (Dann bekam ich das Fenster vom Firefox, ob ich die Script-Ausführung unterbrechen möchte)

Warum wird so oft durch die While-Schleife gelaufen? Meinem Verständnis nach hätten es nur 2 Durchläufe sein dürfen. Wie kann ich sonst eine Verzögerung einbauen? (Es sollen später sichtbare CSS-Transitions ablaufen)

Liebe Grüße,

Marvin

  1. Tach!

    Warum wird so oft durch die While-Schleife gelaufen? Meinem Verständnis nach hätten es nur 2 Durchläufe sein dürfen.

    settimeout() wartet nicht. Es startet lediglich die Eieruhr und der Code an der aufrufenden Stelle läuft sofort weiter.

    Wie kann ich sonst eine Verzögerung einbauen? (Es sollen später sichtbare CSS-Transitions ablaufen)

    Indem du zeitgesteuert und nicht while-gesteuert arbeitest. Dazu kann eine Aufgabenwarteschlange helfen, die die Timertick-Funktion abarbeitet. Vielleicht solltest du dann auch auf setinterval() umsteigen.

    dedlfix.

    1. settimeout() wartet nicht. Es startet lediglich die Eieruhr und der Code an der aufrufenden Stelle läuft sofort weiter.

      Vielen Dank. Das hätte mir auch vorher schon einleuchten können. Ich kann es erst nach der Schule umbauen und testen.

      Marvin