Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Javascript: agressive Intervalle

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Javascript: agressive Intervalle

    This topic has been deleted. Only users with topic management privileges can see it.
    • Codierknecht
      Codierknecht Developer Most Active @Rene55 last edited by Codierknecht

      @rene55
      Vielleicht so?

      function doSomething(delay) {
          if (delay > 0) {
              setTimeout(function() {
                  console.log('Leg los ...');
                  delay -= 3000;
                  doSomething(delay);
              }, delay);
          };
      }
      
      console.log('Leg los ...');
      doSomething(9000);
      
      Rene55 1 Reply Last reply Reply Quote 1
      • bahnuhr
        bahnuhr Forum Testing Most Active @Rene55 last edited by

        @rene55

        Mach doch einfach 3 x timeout.
        Oder ich habe dich nicht verstanden.

        setTimeout(function() {
                        // tue was 1
        }, 9000);   
        setTimeout(function() {
                        // tue was 2
        }, 15000);   
        setTimeout(function() {
                        // tue was 3
        }, 18000);   
        
        
        Rene55 1 Reply Last reply Reply Quote 0
        • Rene55
          Rene55 @Codierknecht last edited by

          @codierknecht Könnte klappen, ist schon mal dynamisch.

          Codierknecht 1 Reply Last reply Reply Quote 0
          • Rene55
            Rene55 @bahnuhr last edited by

            @bahnuhr Ja schon richtig verstanden. Ich wollte es nur 'elegant' haben.

            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Rene55 last edited by

              @rene55
              Ich rate mal: Du willst damit etwas ausgeben und Deine Familie terrorisieren?
              Nach dem Motto: "Hömma du Vollhorst, mach endlich datt Fenster zu!!!" 😁 😁 😁

              Die Differenz (3000) könnte man auch noch dynamisch der Funktion als Parameter mitgeben.

              Hoffentlich verprügelt Dich niemand 😉

              Rene55 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Rene55 last edited by

                @rene55 sagte: soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden

                Da es nach Blockly generiertem Code aussieht, eine Blockly-Version:

                Blockly_temp.JPG

                Rene55 1 Reply Last reply Reply Quote 0
                • Rene55
                  Rene55 @paul53 last edited by

                  @paul53 Das wird wohl der richtige Ansatz für mich werden! Danke.
                  Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                  Codierknecht paul53 2 Replies Last reply Reply Quote 0
                  • Codierknecht
                    Codierknecht Developer Most Active @Rene55 last edited by

                    @rene55 sagte in Javascript: agressive Intervalle:

                    Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                    Weil z.B. die Callbacks von kaum jemandem so geschrieben würden 😉

                    Rene55 1 Reply Last reply Reply Quote 0
                    • Rene55
                      Rene55 @Codierknecht last edited by

                      @codierknecht Fast gut geraten. Es soll eine Ansage werden dass ICH die Einnahme von Tabletten nicht vergesse. Die drei Sekunden sind hier natürlich zu Testzwecken. Werden dann wohl so ca. 6 Minuten werden. Hinzu kommt dannnoch die Möglichkeit (irgendein Taster), die Ansagen abzubrechen, wenn ich meine Pillen genommen habe.

                      1 Reply Last reply Reply Quote 0
                      • Rene55
                        Rene55 @Codierknecht last edited by

                        @codierknecht sagte in Javascript: agressive Intervalle:

                        Callbacks

                        Wie schreibt man die denn 'richtig'?

                        Codierknecht 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @Rene55 last edited by paul53

                          @rene55 sagte: Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                          Im ursprünglichen Code sind Zeilen 5 und 9 typische Blockly-Konstrukte, die man als Javascript-Programmierer i.d.R. so nicht schreiben würde.

                          Rene55 1 Reply Last reply Reply Quote 1
                          • Rene55
                            Rene55 @paul53 last edited by Rene55

                            @paul53 Ja, besonders Zeile 9 hätte ich aus meinem Hirn so nicht hinbekommen!

                            1 Reply Last reply Reply Quote 0
                            • Codierknecht
                              Codierknecht Developer Most Active @Rene55 last edited by

                              @rene55 sagte in [gelöst] Javascript: agressive Intervalle:

                              Wie schreibt man die denn 'richtig'?

                              Die sind ja nicht falsch. Aber die würden die meisten (oder zumindest so einige) Programmierer wohl etwas anders formulieren.
                              Wie @paul53 schon schreibt, ist auch gerade das Dekrimieren des Counter so "typisch Blockly".

                                  if (counter) {
                                      counter--;
                                      doAnything(counter);
                                  } else {
                                      if (Intervall) { clearInterval(Intervall); Intervall = null; };
                                      log('Fertig');
                                  }
                              
                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @Codierknecht last edited by

                                @codierknecht
                                Da der Teil innerhalb der Intervall-Callback-Funktion ausgeführt wird, kann man sich die Prüfung und das Rücksetzen auf null sparen.

                                    if (counter > 0) {
                                        counter--;
                                        doAnything(counter);
                                    } else {
                                        clearInterval(Intervall);
                                        log('Fertig');
                                    }
                                

                                Die Prüfung "counter > 0" ist sinnvoll, wenn nicht garantiert werden kann, dass counter mit einer positiven ganzen Zahl initialisiert wurde.

                                Codierknecht 1 Reply Last reply Reply Quote 0
                                • Codierknecht
                                  Codierknecht Developer Most Active @paul53 last edited by

                                  @paul53 sagte in [gelöst] Javascript: agressive Intervalle:

                                  kann man sich die Prüfung und das Rücksetzen auf null sparen

                                  ... auch das 😉

                                  Rene55 1 Reply Last reply Reply Quote 0
                                  • Rene55
                                    Rene55 @Codierknecht last edited by

                                    @codierknecht @paul53 Danke euch beiden - wieder was gelernt 😊

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    678
                                    Online

                                    31.7k
                                    Users

                                    79.7k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    17
                                    357
                                    Loading More Posts
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    The ioBroker Community 2014-2023
                                    logo