molily: JavaScript unterbrechen (alert() ohne Ausgabe)

Beitrag lesen

Hallo,

Hallo,

ich hab ein Problem:
Ich habe zwei Aufrufe die in JS nicht direkt hintereinander funktionieren

Warum? Was machen foo und bar?

Ich habe schon eine sleep()-Funktion mittels XMLHttpRequest und PHP gebaut

Argh. sleep() in JavaScript ist fast immer unsinnig.

Gibt es irgendeinen Trick den JavaScript-Code zu unterbrechen?

In JavaScript gibt es kein »Unterbrechen«, sondern eine Funktion endet, dann kommt die JavaScript-Ausführung zur Ruhe und z.B. durch einen Timeout wird eine Funktion zeitverzögert gestartet.

Du kannst nicht einen Programmteil auf die verzögerte Ausführung eines anderen Programmteiles »warten« lassen.

Ich habe schon probiert bar() mit setTimeout aufzurufen, aber das klappt nicht, da ich wieder solange warte bis bar() aufgerufen wurde und damit immernoch nicht den Code unterbrochen habe.

Den Satz verstehe ich nicht.

Ich glaube, der Knackpunkt liegt darin, dass du einen Programmablauf geschrieben hast, der Zeile für Zeile ohne Unterbrechung durchlaufen muss. Das musst du umschreiben, sodass er mit setTimeout funktioniert.

var rückgabe = bar();
// Mach was mit rückgabe

Wenn du bar jetzt zeitverzögert aufrufen willst, kommst du natürlich nicht an dessen Rückgabewert:

var rückgabe = window.setTimeout(bar, 2000);
// Mach was mit rückgabe - geht aber nicht

Also musst du das »Mach was mit rückgabe« in die Funktion packen, die zeitverzögert aufgerufen wird.

function bar () {
   // berechne rückgabe
   // mach was mit rückgabe
}
...

function b () {
   ...
   window.setTimeout(bar, 2000);
   // hier ist dann Ende
}

Deine Funktion a muss dann entsprechend angepasst werden. Das, was nach dem b()-Aufruf kommt, muss in den Teil »mach was mit rückgabe«. So hast du letztlich eine Kette von Funktionen, die sich verzögert aufrufen. Das ist das gleiche wie mit Event-Handlern, da gibt es z.B. kein »Warte, bis die Maustaste wieder losgelassen wurde«, sondern einen mousedown- und einen mouseup-Event.

Mathias