• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Aktives warten

eclere

New member
Hallo zusammen,

ich möchte gerne aktiv auf eine JaveScript Funktion warten. Jedoch soll der Browser währenddessen nicht blockiert sein. Nach etwas Suche erfährt man dass while keine gute Lösung ist, und man besser setTimeout verwenden soll. Habe ich gemacht:
Code:
var result = -100;
function showAnswer()
        {
            document.getElementById('btn').style.display = 'none';

            var ret = wait();

            window.alert(result);
        }

function wait()
        {
            if (result >= 0)
                return;
            else
                window.setTimeout(wait, 50);
        }

Nun, mein Konstrukt arbeitet leider nicht wie gewünscht. Nach dem Aufruf von wait() kommt direkt im Anschluss das alert(...). Ich wollte aber dass sich wait immer wieder selbst aufruft, bis result >= 0 ist und erst dann das alert gemacht wird.

Hat jemand einen kleinen Tipp wie ich das um Laufen bringe?

Viele Grüße
Thorsten
 
setTimeout ruft nach der angegebenen zeit die übergebene funktion auf. aktives warten gibt es nicht/sollte es nicht geben
Code:
function showAnswer()
{
  document.getElementById('btn').style.display = 'none';
  setTimeout(wait, 50);
}

function wait()
{
  var result = -100;
  alert(result);
}
 
Du musst dich mal in das Thema Events oder Promises einlesen. Das sind Wege, wie man solches "Warten" realisieren kann.
 
Das hier wartet synchron:
HTML:
function sleep_synchron(sekunden) {
	var cur_d = new Date();
	var cur_ticks = cur_d.getTime();
	var ms_passed = 0;
	var ms = sekunden*1000;
	while (ms_passed < ms) {
		var d = new Date();
		var ticks = d.getTime();
		ms_passed = ticks-cur_ticks;
	}
}
Quelle: Is there some way to introduce a delay in javascript? - Stack Overflow

Das benutze ich aber nur in Testefällen, nicht in Produktion. Es ist weder optimiert, noch schont es die CPU!
JS ist nicht dafür gedacht, was man in PHP sleep() nennt.
 
Das hier wartet synchron
aber worauf? da gibt es nichts was mir einfallen würde, was nach der funktion anders sein sollte als vorher, es ist nur zeit vergangen

Das benutze ich aber nur in Testefällen, nicht in Produktion.
weil sich aber keine änderungen ergeben können, gibt es auch keinen grund das einzusetzen, auch nicht in testfällen
selbst wenn es einen grund geben sollte, hat man an anderer stelle etwas falsch gemacht, da man immer auch asynchron warten kann, zur (größten) not durch polling.
 
Guten morgen,
also es ist so dass ich polling machen muss. Mir ist durchaus bewusst dass dies wenig optimal ist, dennoch nutze ich externe Technologie, auf welche ich keinen Einfluss habe. Im Prinzip muss ich darauf warten dass ein User einen bestimmten Button geklickt hat. Dieser verändert die Variable 'result'. Und dies ist das für mich interessante Ergebnis.
Ich selbst hab bereits ein polling über eine while Schleife versucht (ähnlich der Lösung von mikdoe), aber das Problem ist ja dann dass der Browser nicht mehr wirklich reagiert und der User gar nicht in der Lage ist den Butten zu klicken.
Warum ich warten muss ist darin begründet, dass eine JavaScript funktion außerhalb des Browsers aufgerufen werden soll, welche dann das Ergebnis des Users liefern soll.
 
Im Prinzip muss ich darauf warten dass ein User einen bestimmten Button geklickt hat. Dieser verändert die Variable 'result'. Und dies ist das für mich interessante Ergebnis.
da musst du nichts pollen, dafür gibt es
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Attribute/onclick

Warum ich warten muss ist darin begründet, dass eine JavaScript funktion außerhalb des Browsers aufgerufen werden soll, welche dann das Ergebnis des Users liefern soll.
was verstehst du unter einer "JavaScript funktion außerhalb des Browsers"?
 
Zurück
Oben