Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Anfänger Frage zu Schleife mit Timeout/Interval

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Anfänger Frage zu Schleife mit Timeout/Interval

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 5 Kommentatoren 1.9k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    dwm
    schrieb am zuletzt editiert von
    #2

    Im Prinzip so …

    for (var i=0; i<5; i++) {
        setTimeout(function(){ saveImage();},i*3000);
    }
    

    Klappt aber nur, wenn saveImage() in weniger als 3s fertig wird.

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      ple
      schrieb am zuletzt editiert von
      #3

      Muss jetzt los, teste ich heute abend mal.

      Auf der schnelle, warum "i" was der Interval ist, mal 3000? Denke die 3000 sind die ms?

      Gruß und Danke

      Intel Nuc + Proxmox

      1 Antwort Letzte Antwort
      0
      • AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        schrieb am zuletzt editiert von
        #4

        @ple:

        Auf der schnelle, warum "i" was der Interval ist, mal 3000? Denke die 3000 sind die ms? `
        Du setzt damit gleichzeitig 5 Timeouts: 0, 3000, 6000, 9000 und 12000ms

        Ist im Prinzip das gleiche wie 5x nacheinander Timeouts zu setzen, aber ein bisschen einfacher in der Umsetzung.

        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

        1 Antwort Letzte Antwort
        0
        • blauholstenB Offline
          blauholstenB Offline
          blauholsten
          Developer
          schrieb am zuletzt editiert von
          #5

          @ple:

          Muss jetzt los, teste ich heute abend mal.

          Auf der schnelle, warum "i" was der Interval ist, mal 3000? Denke die 3000 sind die ms?

          Gruß und Danke `
          Die for Schleife, führt ihre Bedingungen solange aus bis diese nicht mehr zutrifft. In diesem Fall 5…dabei wird die Variable i immer um eins erhöht. In der Anweisung der for Schleife wird nun eine anonyme callback function angelegt, die dann i*3000ms, die saveimage() Funktion aufruft.....3s,6s,9s...usw.

          Entwickler vom: - Viessman Adapter
          - Alarm Adapter

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            ple
            schrieb am zuletzt editiert von
            #6

            wollte es gerade testen, aber der meckert irgendwie
            1241_bildschirmfoto_2017-08-25_um_11.05.56.png

            Intel Nuc + Proxmox

            1 Antwort Letzte Antwort
            0
            • AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              schrieb am zuletzt editiert von
              #7

              @ple:

              wollte es gerade testen, aber der meckert irgendwie `
              Funktionen in einer Schleife können unerwartete Konsequenzen haben, was Parameter angeht. Man erwartet, dass die nacheinander mit dem jeweiligen Wert der Schleifenvariable erstellt werden, tatsächlich hat man nachher mehrere Kopien, die alle auf den letzten Wert referenzieren. Es gibt Konstrukte, wie man das verhindern kann, aber das ist hier Overkill.

              In deinem Fall, wäre das vollkommen ok. So gehts aber auch ohne Warnung:

              for (var i=0; i<5; i++) {
                  setTimeout(saveImage, i*3000);
              }
              

              Man beachte die fehlenden Klammern hinter saveImage => es wird nur die Funktionsreferenz übergeben, die später von setTimeout ausgeführt wird.

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #8

                Anstelle 5 Timer zu erzeugen, würde ich setInterval() zusammen mit einer Zählvariable verwenden. Etwa so:

                var timer = null;
                var count = 0;
                
                function counter() {
                    saveimage();
                    count--;
                    if(count === 0 && timer) clearInterval(timer);
                }    
                
                on({id: "hm-rpc.0.NEQ0629079.1.STATE"/*Flur_FK_Haustür:1.STATE*/, val: true}, function () {
                    count = 5;
                    counter();
                    timer = setInterval(counter, 3000);
                });
                

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  ple
                  schrieb am zuletzt editiert von
                  #9

                  Vielen Dank für eure Ideen,

                  Umgesetzt habe ich jetzt den Vorschlag von Paul 53, das kann ich nachvollziehen und wäre auch meine Richtung gewesen, wenn ich gewusst hätte wie der Syntax aussehen muss.

                  Hat auch den Vorteil, dass ich die Funktion abbrechen kann.

                  Das Beispiel kann ich auch auf andere Projekte umsetzen.

                  Die For Schleife von AlCalzone ist auch sehr interessant, kann ich dann auf andere Anwendungen anweisen. Vielen Dank.

                  Besteht da auch die Möglichkeit die erzeugten Timer irgendwie abzubrechen?

                  Gruß

                  Intel Nuc + Proxmox

                  1 Antwort Letzte Antwort
                  0
                  • AlCalzoneA Offline
                    AlCalzoneA Offline
                    AlCalzone
                    Developer
                    schrieb am zuletzt editiert von
                    #10

                    @ple:

                    Besteht da auch die Möglichkeit die erzeugten Timer irgendwie abzubrechen? `
                    Da müsstest du alle Timer in ein Array packen und die dann zum Abbrechen nutzen:

                    var timers = [];
                    // Erstellen:
                    for (var i=0; i<5; i++) {
                    	timers.push(setTimeout(saveImage, i*3000));
                    }
                    
                    // abbrechen:
                    while (timers.length > 0) {
                    	clearTimeout(timers.pop());
                    }
                    
                    

                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      ple
                      schrieb am zuletzt editiert von
                      #11

                      @AlCalzone:

                      @ple:

                      Besteht da auch die Möglichkeit die erzeugten Timer irgendwie abzubrechen? `
                      Da müsstest du alle Timer in ein Array packen und die dann zum Abbrechen nutzen:

                      var timers = [];
                      // Erstellen:
                      for (var i=0; i<5; i++) {
                      	timers.push(setTimeout(saveImage, i*3000));
                      }
                      
                      // abbrechen:
                      while (timers.length > 0) {
                      	clearTimeout(timers.pop());
                      }
                      
                      ```` `  
                      

                      Eh, ja, guck ich mir nach dem Urlaub an ;-)

                      Danke

                      Intel Nuc + Proxmox

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      779

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe