JS - Warten bis eine Variable true ist

  • Hi leute,
    wisst ihr obs in Javascript ne möglichkeit gibt, ne bestimmte zeit (oder auch für eeeewig ;)) zu warten, bis eine Variable einen bestimmten Wert (bei mir brauchts blos true) hat? Wär supercool wenn da jemand was wüsste, danke schonaml im vorraus an alle die sich gedanken machen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • mal so als doofe idee, ne funktion schreiben die ne globale variable initialisiert und diese methode rufste im timeout auf, denn du in der funktion wieder deaktivierst

    pseudocode:

  • Coole idee, klappt aber leider nicht, weil das Hauptscript dann ja weiterläuft, aber das darfs nicht. Wenn man nen alert(); aufruft, wartet das script ja auch, bis was aufm alert geklickt wurde.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • mmh was hälste denn davon des hauptscript in zwei funktionen auszulagern?

    dann lässte die eine laufen, dann des mit dem timeout und dann die andere.
    is nen arsch voll arbeit und du brauchst viele viele globale vars, aber könnte klappen

    ansonsten sind spkulationen schwer ohne zu wissen worum es ght und was du machen willst..
    und von threads in javascript hab ich auch noch net gehört...

  • Allein bei dem Gedanken an eine "Endlosschliefe" wird mir übel. Wofür braucht man so einen Quatsch???

  • Allein bei dem Gedanken an eine "Endlosschliefe" wird mir übel. Wofür braucht man so einen Quatsch???

    Im Web-Bereich kann ich zustimmen, aber es gibt ja noch andere *g*. Jedes Programm in AutoIT z.B. muss in eine Endlosschleife gepackt werden :D
    Hab jetzt versucht mir was auszudenken, komm aber auf keinen Fall, bei dem ich es brauchen würde (in JS). Wird wohl wirklich ein Dino-fall sein.

    Tobse, anders geht es nun mal nicht. Du kannst dir deine kleine "Pause" Funktion schreiben, dann musst du aber dementsprechend noch die Bedingungen in dein Hauptscript einbauen. Da wir immer noch nicht wissen, worum es geht, kann ich schlecht sagen ob sich der Aufwand lohnt.
    Wenn das Hauptscript garnicht erst gestartet werden soll bis die Bedingung erfüllt wird, wäre aufjedenfall schnell realisiert. Mittendrin kann es oft kompliziert werden, je nach deiner Scriptlänge eben.

  • Des problem ist halt, dass das Hauptscript eien Wert zurückgeben soll, aber da das von einer Variable abhängt, die etwas bruach, um bereit zu sein, muss das script warten.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ich wollte mir ein AJAX-Tool bauen. Das hätte dann so ausgesehen:

    Code
    ajax.call("eine.xml");
    ajax.get("tagname", [nummer]);

    Und das geht dann so:
    ajax.call(); Baut über ein verbindungs-Objekt die Verbindung zum Server auf und ruft den request ab. Dann kann man ja über request.onreadystatechange eine funktiondefinieren. In de seteht dann

    Code
    fnction readystatechange() {
    if (request.readyState==4) {
        if (request.anderStatus==200) { // Ich hab den code nciht hier
            ajax.saved=request.responseXML;
            ajax.fetched=true;
        }
    }

    Und daran liegts. Wenn man jetzt mit ajax.get(); die sachen haben will, BEVOR sie durch readystatechange(); verfügbar sind, klappts nicht. Also soll ajax.call(); aufgehalten werden, bis ajax.fetched true ist, damit das Hauptscript ajax.get(); erst dann ausführt, wenn die Daten auch da sind. Und ein weiteres Problem, dass auchnoch aufgetreten ist, ist, dass readystatechange() nichtmal aufgerufen wird.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ich verstehs nich so ganz, sorry. Wie meinst du das

    Zitat


    und für danach die methode mit dem call aus wo du des aber auch vom true deiner variablen abhängig machst

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Code
    function readystatechange() {
    if (request.readyState==4) {
        if (request.anderStatus==200) { // Ich hab den code nciht hier
            ajax.saved=request.responseXML;
            ajax.fetched=true;
    ajax.call("eine.xml");
    ajax.get("tagname", [nummer]);
        }
    }

    es sei denn ich hab dich falsch verstanden...

  • Ne, dass gibt ne Endlosschleife. In ajax.call(); wird ja readystatechange(); dazu benützt, die Daten bereitzustellen. Und ajax.get(); soll warten, bis readystatechange(); das getan hat.

    EDIT:
    Ich habe jetzt von Bekannten erfahren, dass es in UNIX-Scripten die funktion wait(); gibt, worauf ich "javascript wait" gegoogelt hab. Ich bin dann auf folgendes gestoßen:

    Code
    function pausecomp(millis) 
    {
            var date = new Date();
            var curDate = null;
    
    
            do { curDate = new Date(); } 
        while(curDate-date < millis);
        }

    und hab das so umgeformt:

    Code
    function waituntil(param, millis)  {
        var date = new Date();
        var curDate = null;
        var i=0;
        while (!param && i<4) {
            do { curDate = new Date(); } 
                while(curDate-date < millis);
            i++;
        }  
        }

    Damit müsste es funktionieren:

    Bleibt aber immernoch das Problem, dass readystatechange(); nicht aufgerufen wird.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    2 Mal editiert, zuletzt von Tobse (26. Dezember 2009 um 15:07)

  • tobse ich bin derzeit übefragt, daich mein ajax-buch zeitmässig abbrechen musste um was anderes zu lesen/machen
    aber grundsätzlich bekommste ja bei nemeinlesen doch automatisch nen readystate und nen returncode zurück und erst wenn des eintritt macht man ja weiter...

  • Jo, so isses. ich bin jez auch wieder daheim und hab den code, ich poste jetzt mal alles was relewant ist. Das müsste, so wies is auch funktionieren, wenn denn (jetz hier:) fetchdata(); aufgerufen würde. Auch wenn ich die hallole(); umbenenn, klappts net. Ich bin hilflos :(

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!