Matze: Sleep - Befehl in JS

Hi!

Gibt es ein Aequivalent zum Sleep - Befehl in C++ auch in JS. Wer kennt ein solches Command ?

mfg... Matze

  1. Hallo Matze

    eine sleepfunktion gibt es in js leider nicht.
    Die einziger lösung ist, set timeout() als letzte anweisung in eine funktion zu verwenden:

    function doSomething()
    {
    asd;
    asd;
    setTimeout("doSomething2()",100);//warten
    }
    function doSomething()
    {
    asd;
    }

    Tschüs

    Daniel

    1. Hi Daniel,

      äähhh...geht das wirklich? Nach meinem bisherigen Verständnis ist setTimeout kein geeignetes Äquivalent zu Sleep, da es nicht wirklich was verzögert. Vielmehr wird der definierte Befehl "angestubst" (der dann z.B. 100 ms später ausgeführt wird), JS betrachtet die Sache als erledigt und geht weiter im Text.
      Sollte es wirklich so sein, dass das am Ende einer Funktion anders ist und dort wirklich gewartet wird?
      Falls es nicht so ist, gilt weiterhin: setTimeout ist kein Äquivalent zu Sleep, aber man müsste damit eines basteln können. So etwa vielleicht:

      function doSomething()
      {
      var a = 0
      bla();
      blubb();
      setTimeout("a = 1",100);
      while (a != 1) {}
      }

      D.h., erst wenn der setTimeout vorbei ist, kann die leere while-Schleife ad Acta gelegt werden, und es geht weiter.

      Obacht! Das ist nur so ein Gedanke, der mir gerade kam - hab's nicht getestet und übernehme keine Garantie dafür!

      Grüße,

      Utz

      1. Hi Utz,

        äähhh...geht das wirklich? Nach meinem bisherigen Verständnis ist setTimeout kein geeignetes Äquivalent zu Sleep, da es nicht wirklich was verzögert. Vielmehr wird der definierte Befehl "angestubst" (der dann z.B. 100 ms später ausgeführt wird), JS betrachtet die Sache als erledigt und geht weiter im Text.

        Stimmt.

        Sollte es wirklich so sein, dass das am Ende einer Funktion anders ist und dort wirklich gewartet wird?

        Ja. Wieso?
        Weil es nichts zum weiter machen gibt, ganz einfach. Der befehl, der verzögert wird ist der nexte befehl.

        Falls es nicht so ist, gilt weiterhin: setTimeout ist kein Äquivalent zu Sleep, aber man müsste damit eines basteln können. So etwa vielleicht:

        function doSomething()
        {
        var a = 0
        bla();
        blubb();
        setTimeout("a = 1",100);
        while (a != 1) {}
        }

        Nette Idee. Tut aber nicht so doll. Solche endlosschleifenteile sind nie gut.

        Tschüs

        Daniel

        1. Hi Daniel,

          Sollte es wirklich so sein, dass das am Ende einer Funktion anders ist und dort wirklich gewartet wird?
          Ja. Wieso?
          Weil es nichts zum weiter machen gibt, ganz einfach. Der befehl, der verzögert wird ist der nexte befehl.

          Nein, das ist definitiv falsch. So wie Du es sagst geht es nicht. Teste diese Datei:

          <html>
          <head>
          <title>Sleep</title>
          <script type="text/javascript">
          <!--
          function gaehn()
            {
              mehrgaehn();
              alert("Zweite Meldung");
            }

          function mehrgaehn()
            {
              setTimeout("alert('Erste Meldung')", 10000);
            }
          //-->
          </script>
          </head>
          <body>
          <a href="#" onClick="gaehn();">Funktion starten</a>
          </body>
          </html>

          Obwohl Du behauptest, dass am Ende der Funktion mehrgaehn() gewartet werden müsste, erscheint das Alert "Zweite Meldung" deutlich vor der ersten. Von einer Sleep-Funktion kann also nicht die Rede sein.

          Nette Idee. Tut aber nicht so doll. Solche endlosschleifenteile sind nie gut.

          *hmpf* Sorry für die Endlosschleife - hatte nicht damit gerechnet dass es nicht funzt, die Variable ausserhalb der while-Schleife zu verändern. Habe noch ein bisschen damit rumgespielt, aber ohne Erfolg - innerhalb von while-Schleifen lässt sich setTimeout weder auf die Variable noch auf ein break anwenden (auf alert z.B. aber schon - muss ich das verstehen?). Auch in andere Funktionen lässt es sich nicht auslagern. Da bleiben letztlich wohl doch nur Hilfsmittel wie in <../../sfarchiv/2000_1/t11294.htm#a56920> oder <../../sfarchiv/1999_2/t02874.htm#a13714>

          Grüße,

          Utz

          1. Hi Utz,

            Nein, das ist definitiv falsch. So wie Du es sagst geht es nicht. Teste diese Datei:

            So habe ich das auch nicht gemeint
            setTimeout muß wirklich das letzte sein was js machen muß.

            beispiel

            function a()
            {
            befehl1;
            setTimeout(b(),);
            }

            function b()
            {
            befehl2;
            }

            zwischen befehl1 und 2 wird nun eine Pause gemacht.

            MfG

            Daniel

            PS: Wenn du widersprechen willst ->E-Mail
            Ich bin nächste Wiche weg, und kann nicht ins forum schauen.

            1. Hi Daniel,

              (...)

              zwischen befehl1 und 2 wird nun eine Pause gemacht.

              Das stimmt und wird in der Regel auch völlig ausreichend sein; ich habe widersprochen, weil mir Deine Aussage zu speziell war, um so im Archiv stehen zu bleiben.
              Stell Dir folgende Variante vor: Jemand hat sich eine Funktionsbibliothek aufgebaut, die als externes JavaScript zugeladen wird. Aus der eigentlichen Datei werden dann die Funktionen der Reihenfolge nach aus einer anderen Funktion aufgerufen. Braucht dieser Mensch nun eine Art Sleep-Funktion, hilft him setTimeout gar nix, da eben nicht darauf gewartet wird. Beispiel:

              function blubb()
              {
              dieseseite();
              lokalefunktion();
              }

              function dieseseite()
              {
              machdieses();
              machjenes();
              setTimeout("jetztdies()", 1000);
              }

              da kommt natürlich lokalefunktion() vor jetztdies(). Und bei einer Funktionsbibliothek kann der Aufruf von lokalefunktion() halt eben nicht in jetztdies() verlagert werden.

              PS: Wenn du widersprechen willst ->E-Mail
              Ich bin nächste Wiche weg, und kann nicht ins forum schauen.

              In dem Fall bin ich mal nicht so, und Du kriegst ne Kopie des Postings per Mail :-)

              Grüße,

              Utz