Zeitlich abhaengige Funktionen in einer for Schleife aufrufen
VinceBassman
- javascript
0 JürgenB0 Vinzenz Mai
Hallo,
Ich moechte in einer for Schleife eine Funktion sequentiell aufrufen. Dieses bedeutet die Funktion soll erst fuer das naechste Element aufgerufen werden, wenn die fuer das aktuelle Element fehlerfrei ausgefuehrt wurde.
So eine art von 'next' Befehl, damit ich die for Schleife selber steuern kann.
Hier die for Schleife:
for (var i=0;i<inputs.length;i++) {
if (inputs[i].getAttribute("type") == "hidden") {
if (inputs[i].name.match(/^ID/)) {
var inds = inputs[i].name.split("_");
// At least 2 elements in inds (<string>_index)
var ind = (inds.length > 1) ? inds[1] : -1;
if (ind >= iteration) {
add(ind,type,cpt);
if (waitForID('ID_'+ind)) { next; }
}
}
}
}
function waitForID(id) {
if (document.getElementById(id)) { return true; }
else { setTimeout("waitForID('"+id+"')",10); }
}
Die 'add' Funktion soll neue Elemente in einer Tabelle erzeugen.
Zur Info: die 'add' Funktion verwendet Ajax und laesst ein Perl Script auf dem Server laufen, der das HTML Code erzeugt.
Die for Schleife darf nur weiterlaufen, wenn es sichergestellt ist, dass die neue Element der Tabelle richtig erzeugt wurden. Deswegen die Pruefung auf die neue ID: waitForID ist eine rekursive Funktion, die jede 10ms kugen soll, ob die neue ID da ist. Wenn es der Fall ist, erst dann darf die for Schleife zum naechsten Element gehen. Das "next" gibt es aber im Javascript nicht und ich weiss es nicht, wie ich es ersetzen kann...
Ich habe mit dem setTimeout auch versucht, die 'add' Funktion in regelmaessigen Abstaenden aufzurufen. Es passiert aber manchmal, dass die Zeit nicht reicht und ich moechte auch nicht zu lange Abstaende haben.
Ich wuerde mich auf Tipps sehr freuen...
Gruss,
Vince.
Hallo VinceBassman,
man kann http-Requests auch synchron laufen lassen.
Gruß, Jürgen
Hallo Vince,
Die 'add' Funktion soll neue Elemente in einer Tabelle erzeugen.
Zur Info: die 'add' Funktion verwendet Ajax und laesst ein Perl Script auf dem Server laufen, der das HTML Code erzeugt.
das "A" in Ajax steht für asynchron. Meiner Meinung nach ist es nicht besonders sinnvoll, eine ganze Reihe von Einzelrequests abzusetzen. Lass Dir die resultierenden Daten gleich in einem Schwung serverseitig von Deinem Perlscript generieren. Halte damit auch die Logik an einer einzigen Stelle zusammen. Als zusätzliches Bonbon entfällt Dein Timingproblem.
Freundliche Grüße
Vinzenz