abfragen ob eine Methode gelaufen ist
Florian
- javascript
Hallo alle miteinander.
Folgendes Problem:
Ich starte eine etwas aufwändigere Initialisierung mittels setTimeout. Das Problem ist, dass ich nach dem setTimeout Aufruf wissen müsste, dass die initialisierung abgeschlossen ist, sprich die Methode, die setTimeout aufgerufen hat, abgeschlossen ist.
etwas Pseudocode:
rendereLadepopup();
setTimeout("init();",50); //setTimout deswegen, weil der IE das Popup sonst nicht vor aufruf der Init Prozedur rendert
//hier sollte jetzt sowas stehen wie "if(initProzedur.finished())" ;-)
document.getElementById('binerstseitinitda');
Ich hoffe ich konnte mein Problem veranschaulichen.
Vielen Dank schon einmal für eure Hilfe.
Hi,
Das Problem ist, dass ich nach dem setTimeout Aufruf wissen müsste, dass die initialisierung abgeschlossen ist, sprich die Methode, die setTimeout aufgerufen hat, abgeschlossen ist.
Wenn das der Fall ist, ist sie fertig. ;-)
Und wenn sie fertig ist, dann kommt der nachfolgendefolgende JS-Code dran.
Oder Du rufst am Ende inneerhalb des Inits selbst die nächste Funktion auf.
Gruß, Cybaer
Entschuldige, da hab ich mich unklar ausgedrückt:
die Methode die von setTimeout aufgerufen wird (also init()) muss fertig sein. Wann das ist, weiß ich aber nicht, da sie ja dank setTimeout in einem separaten Thread läuft. Die init() läuft ca. 20 sek und wird auch an anderen Stellen aufgerufen, also kann ich an der nix verändern.
Danke für deine Antwort.
Hi,
Das Problem ist, dass ich nach dem setTimeout Aufruf wissen müsste, dass die initialisierung abgeschlossen ist, sprich die Methode, die setTimeout aufgerufen hat, abgeschlossen ist.
Wenn das der Fall ist, ist sie fertig. ;-)
Und wenn sie fertig ist, dann kommt der nachfolgendefolgende JS-Code dran.
Oder Du rufst am Ende inneerhalb des Inits selbst die nächste Funktion auf.
Gruß, Cybaer
Hi,
Die init() läuft ca. 20 sek und wird auch an anderen Stellen aufgerufen, also kann ich an der nix verändern.
Du kannst mit setTimeout() beliebigen Code aufrufen, nicht nur eine einzelne Funktion.
Auch 100 Funktionen nacheinander, wenn Du es brauchst. ;-)
So wie Du dir das aber anscheinend vorstellst, wird es in JS halt nicht klappen ...
Gruß, Cybaer
Hallo,
Die init() läuft ca. 20 sek
hmm, dann stimmt etwas am Konzept der Seite nicht.
Warum sollte ein User 20 sec auf eine Sanduhr, oder was auch immer, starren?
und wird auch an anderen Stellen aufgerufen,
also kann ich an der nix verändern.
Im allergroesten Notfall kann man bei dem Aufruf von init() einen Parameter
mitgeben und den am Ende der Funktion auswerten, ist er > 0 passiert etwas,
sonst eben nix.
Gruss und Dank
Norbert
Die init() läuft ca. 20 sek
hmm, dann stimmt etwas am Konzept der Seite nicht.
Warum sollte ein User 20 sec auf eine Sanduhr, oder was auch immer, starren?
Das liegt daran, dass es sich um eine komplexe Webapplikation handelt, und auf den alten Tablets die noch teilweise unterwegs sind, läuft diese sehr umfangreiche und aufwändige Routine eben auch sehr lange.
Dein Ansatz mit dem Parameter hilft doch nur in dem Maß wie die schon vorgestellte Lösung mit der Variablen. Sollte die init() noch nicht fertig sein wenn ich abfrage, dann wird der Code ja nicht ausgeführt.
Ich möchte aber dass er ausgeführt wird nachdem die init() gelaufen ist.
Aber wahrsheinlich kann ich das nicht elegant lösen, deshalb überlege ich mir jetzt einen Workaround, mit dem ich verzögert in einer Schleife eine Zustandsvariable abfrage... wenns geht schreib ich die Lösung...
Aber wahrsheinlich kann ich das nicht elegant lösen, deshalb überlege ich mir jetzt einen Workaround, mit dem ich verzögert in einer Schleife eine Zustandsvariable abfrage... wenns geht schreib ich die Lösung...
Natürlich kann man das ganze elegant lösen, der Begriff den du suchst ist Events. D.h. du definierst dir irgendwo in deinem Objekt oder was du hast einen Eventhandler, den du vor dem Aufruf deiner langwierigen Operation mit einer Funktionsreferenz setzt und diese dann nach erfolgter Operation aufrufst. Genauso läuft das ja auch intern schon.
in etwa sähe das so aus:
function init() {
// tu was sehr lange dauerndes
....
if(typeof init.onload == 'function')init.onload();
}
// Der Aufruf:
init.onload = function() {
alert('fertig');
}
window.setTimeout(init, 1000);
Ganz einfach und ohne interval oder ähnlichen Aufwändigen Sachen.
Struppi.
function init() {
// tu was sehr lange dauerndes
....
if(typeof init.onload == 'function')init.onload();
}// Der Aufruf:
init.onload = function() {
alert('fertig');
}
window.setTimeout(init, 1000);
Bingo, genau das hab ich gesucht! Mit dem Event weiß ich dann ganz genau wann der init durch ist und starte meine weiteren Routinen an!
Super! Danke für die Lösung!
Hi Struppi.
Du bist hiermit mein persoenlicher Held. Genau sowas habe ich gesucht fuer eine Funktion die auf Usereingaben wartet und je nach Kontext in dem sie benutzt wird, andere Reaktionen produzieren soll. (Kalender)
Auf Eventhandler bin ich nicht gekommen... *verbeug*
Hallo alle miteinander.
Folgendes Problem:
Ich starte eine etwas aufwändigere Initialisierung mittels setTimeout. Das Problem ist, dass ich nach dem setTimeout Aufruf wissen müsste, dass die initialisierung abgeschlossen ist, sprich die Methode, die setTimeout aufgerufen hat, abgeschlossen ist.
Warum so kompliziert?
Möglichkeit 1: am Ende der Funktion deinen weiteren Code aufrufen (per Funktion)
Möglichkeit 2: am Ende der Funktion eine Variable setzen, dass Funktion fertig
Beispiel bei dem es genauso kompliziert aussieht wie du es dir vorstellst:
var initProzedur = {};
initProzedur.finished = false;
function init() {
...
initProzedur.finished = true;
}
rendereLadepopup();
setTimeout("init();", 50);
// hier sollte jetzt noch was kommen, sonst ist init noch nicht ausgeführt
if (initProzedur.finished) {
document.getElementById('ichbinerstseitinitda');
}
Warum so kompliziert?
Möglichkeit 1: am Ende der Funktion deinen weiteren Code aufrufen (per Funktion)Möglichkeit 2: am Ende der Funktion eine Variable setzen, dass Funktion fertig
oder Möglichkeit 3
Struppi.