Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Frage] Timer oder Interval in Funktion löschen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    899

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[Frage] Timer oder Interval in Funktion löschen

Scheduled Pinned Locked Moved JavaScript
11 Posts 3 Posters 625 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    CruziX
    wrote on last edited by CruziX
    #1

    Hallo Zusammen,

    ich hab da mal zwei Fragen zu Timern bzw. bei Intervallen wird höchstwahrscheinlich ähnlich sein.

    Ein Timer/Timeout lässt sich ja mit folgendem Code leeren:

    clearTimeout(timeout);
    timeout = null;
    

    Und danach ist timeout null.
    Jetzt hab ich eine Funktion die genau das macht, aber nach dem Ausführen ist timeout immer noch ein object..

    1. Wie kann ich einen Timeout mittels einer Funktion löschen?

    Weiterhin:
    Ich frage einen laufenden Timeout immer mit if(timeout) ab und wenn ich den so lösche, dass er null ist klappt das auch, aber das ist er auch nach ablaufen nicht.
    2. Muss ich den timeout nach ablaufen noch selber löschen?

    Beispiel:

    let timeout,timeout2;
    
    function clearT(time){
       clearTimeout(time);
       time = null;
    }
    
    timeout = setTimeout(() =>{},2000)
    clearT(timeout)
    log('Gelöscht: ' + String(timeout));
    
    timeout2 = setTimeout(() =>{},2000)
    clearTimeout(timeout2);
    timeout2 = null;
    log('null: ' + String(timeout2));
    
    

    Ausgabe:
    4d2eb1c8-f1a1-450e-8c32-fa869888681a-image.png

    paul53P 1 Reply Last reply
    0
    • C CruziX

      Hallo Zusammen,

      ich hab da mal zwei Fragen zu Timern bzw. bei Intervallen wird höchstwahrscheinlich ähnlich sein.

      Ein Timer/Timeout lässt sich ja mit folgendem Code leeren:

      clearTimeout(timeout);
      timeout = null;
      

      Und danach ist timeout null.
      Jetzt hab ich eine Funktion die genau das macht, aber nach dem Ausführen ist timeout immer noch ein object..

      1. Wie kann ich einen Timeout mittels einer Funktion löschen?

      Weiterhin:
      Ich frage einen laufenden Timeout immer mit if(timeout) ab und wenn ich den so lösche, dass er null ist klappt das auch, aber das ist er auch nach ablaufen nicht.
      2. Muss ich den timeout nach ablaufen noch selber löschen?

      Beispiel:

      let timeout,timeout2;
      
      function clearT(time){
         clearTimeout(time);
         time = null;
      }
      
      timeout = setTimeout(() =>{},2000)
      clearT(timeout)
      log('Gelöscht: ' + String(timeout));
      
      timeout2 = setTimeout(() =>{},2000)
      clearTimeout(timeout2);
      timeout2 = null;
      log('null: ' + String(timeout2));
      
      

      Ausgabe:
      4d2eb1c8-f1a1-450e-8c32-fa869888681a-image.png

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @CruziX sagt:

      Ich frage einen laufenden Timeout immer mit if(timeout) ab und wenn ich den so lösche, dass er null ist klappt das auch, aber das ist er auch nach ablaufen nicht.

      Das Timer-Objekt wird bei Ablauf der Verzögerungszeit nicht automatisch null (null ist übrigens ein Objekt). Wenn man mit if(timeout) abfragt, muss man die Variable bei Ablauf auf null setzen.

      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

      C 1 Reply Last reply
      0
      • paul53P paul53

        @CruziX sagt:

        Ich frage einen laufenden Timeout immer mit if(timeout) ab und wenn ich den so lösche, dass er null ist klappt das auch, aber das ist er auch nach ablaufen nicht.

        Das Timer-Objekt wird bei Ablauf der Verzögerungszeit nicht automatisch null (null ist übrigens ein Objekt). Wenn man mit if(timeout) abfragt, muss man die Variable bei Ablauf auf null setzen.

        C Offline
        C Offline
        CruziX
        wrote on last edited by
        #3

        @paul53 Ok, danke für die Erklärung.
        Weißt du vielleicht auch eine Lösung für meine erste Frage?

        MicM paul53P 2 Replies Last reply
        0
        • C CruziX

          @paul53 Ok, danke für die Erklärung.
          Weißt du vielleicht auch eine Lösung für meine erste Frage?

          MicM Offline
          MicM Offline
          Mic
          Developer
          wrote on last edited by
          #4

          @CruziX sagte in [Frage] Timer oder Interval in Funktion löschen:

          Weißt du vielleicht auch eine Lösung für meine erste Frage?

          Was möchtest du denn, lieber undefined, oder doch null?

          Schau mal hier:

          let mytimeout = setTimeout(function() {
              log('Timeout ausgeführt. Hallo Welt :-)');
          }, 60 * 1000);
          log('Typenprüfung mytymeout Start: ' + (typeof mytimeout));
          
          clearTimeout(mytimeout);
          log('Typenprüfung mytymeout clearTimeout(mytimeout): ' + (typeof mytimeout));
          
          mytimeout = null;
          log('Typenprüfung mytimeout = null: ' + (typeof mytimeout));
          log('Ausgabe mytimeout-Variable nach = null: ' + mytimeout);
          
          mytimeout = undefined;
          log('Typenprüfung mytimeout = undefined: ' + (typeof mytimeout));
          

          Ergibt:

          Typenprüfung mytymeout Start: object
          Typenprüfung mytymeout clearTimeout(mytimeout): object
          Typenprüfung mytimeout = null: object
          Ausgabe mytimeout nach = null: null
          Typenprüfung mytimeout = undefined: undefined
          
          C 1 Reply Last reply
          0
          • MicM Offline
            MicM Offline
            Mic
            Developer
            wrote on last edited by
            #5

            Update:

            let mytimeout = setTimeout(function() {
                log('Timeout ausgeführt. Hallo Welt :-)');
            }, 60 * 1000);
            log('Typenprüfung mytymeout Start: ' + (typeof mytimeout));
             
            clearTimeout(mytimeout);
            log('Typenprüfung mytymeout clearTimeout(mytimeout): ' + (typeof mytimeout));
            log('Ausgabe mytimeout-Variable nach clearTimeout(mytimeout): ' + JSON.stringify(mytimeout)); 
            
            mytimeout = null;
            log('Typenprüfung mytimeout = null: ' + (typeof mytimeout));
            log('Ausgabe mytimeout-Variable nach = null: ' + mytimeout);
             
            mytimeout = undefined;
            log('Typenprüfung mytimeout = undefined: ' + (typeof mytimeout));
            

            Ergibt:

            Typenprüfung mytymeout Start: object
            Typenprüfung mytymeout clearTimeout(mytimeout): object
            Ausgabe mytimeout-Variable nach clearTimeout(mytimeout): {"_called":false,"_idleTimeout":-1,"_idlePrev":null,"_idleNext":null,"_idleStart":81543485,"_onTimeout":null,"_timerArgs":[null,null,null,null],"_repeat":null,"_destroyed":false}
            Typenprüfung mytimeout = null: object
            Ausgabe mytimeout-Variable nach = null: null
            

            Teste selbst grad mit Timeouts :-)

            1 Reply Last reply
            0
            • MicM Mic

              @CruziX sagte in [Frage] Timer oder Interval in Funktion löschen:

              Weißt du vielleicht auch eine Lösung für meine erste Frage?

              Was möchtest du denn, lieber undefined, oder doch null?

              Schau mal hier:

              let mytimeout = setTimeout(function() {
                  log('Timeout ausgeführt. Hallo Welt :-)');
              }, 60 * 1000);
              log('Typenprüfung mytymeout Start: ' + (typeof mytimeout));
              
              clearTimeout(mytimeout);
              log('Typenprüfung mytymeout clearTimeout(mytimeout): ' + (typeof mytimeout));
              
              mytimeout = null;
              log('Typenprüfung mytimeout = null: ' + (typeof mytimeout));
              log('Ausgabe mytimeout-Variable nach = null: ' + mytimeout);
              
              mytimeout = undefined;
              log('Typenprüfung mytimeout = undefined: ' + (typeof mytimeout));
              

              Ergibt:

              Typenprüfung mytymeout Start: object
              Typenprüfung mytymeout clearTimeout(mytimeout): object
              Typenprüfung mytimeout = null: object
              Ausgabe mytimeout nach = null: null
              Typenprüfung mytimeout = undefined: undefined
              
              C Offline
              C Offline
              CruziX
              wrote on last edited by
              #6

              @Mic danke, null wäre eig gut, aber ich würde das ja gerne in einer Funktion machen.
              Das funktioniert aber leider nicht, sonst müsste danach der timeout ja null sein :o
              Aber der timeout ist doch ein objekt, also sollte das doch per call by reference geschehen und der richtige timeout auf null gesetzt werden :thinking_face:

              1 Reply Last reply
              0
              • C CruziX

                @paul53 Ok, danke für die Erklärung.
                Weißt du vielleicht auch eine Lösung für meine erste Frage?

                paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by paul53
                #7

                @CruziX sagte:

                Lösung für meine erste Frage?

                In Javascript ist mir keine Methode zur Variablenübergabe per Referenz (Zeiger) bekannt.
                Wenn man viele Timer verwendet, fällt mir nur die Array-Methode ein.

                var timers = [];
                
                function clearT(i){
                   clearTimeout(timers[i]);
                   timers[i] = null;
                }
                
                timers[0] = setTimeout(function() {
                    clearT(0);
                    log(timers[0]);
                }, 1000);
                

                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

                C 1 Reply Last reply
                0
                • MicM Offline
                  MicM Offline
                  Mic
                  Developer
                  wrote on last edited by
                  #8

                  Erste Idee: ggf. könntest du auch alternativ das Objekt abfragen:

                  Ausgabe mytimeout-Variable nach clearTimeout(mytimeout): {"_called":false,"_idleTimeout":-1,"_idlePrev":null,"_idleNext":null,"_idleStart":81543485,"_onTimeout":null,"_timerArgs":[null,null,null,null],"_repeat":null,"_destroyed":false}
                  Typenprüfung mytimeout = null: object
                  Ausgabe mytimeout-Variable nach = null: null
                  
                  

                  Also etwa mytymeout._onTimemout (falls das der beste Objekt-Schlüssel hierfür ist) Also falls false, dann mach xxx

                  C 1 Reply Last reply
                  0
                  • paul53P paul53

                    @CruziX sagte:

                    Lösung für meine erste Frage?

                    In Javascript ist mir keine Methode zur Variablenübergabe per Referenz (Zeiger) bekannt.
                    Wenn man viele Timer verwendet, fällt mir nur die Array-Methode ein.

                    var timers = [];
                    
                    function clearT(i){
                       clearTimeout(timers[i]);
                       timers[i] = null;
                    }
                    
                    timers[0] = setTimeout(function() {
                        clearT(0);
                        log(timers[0]);
                    }, 1000);
                    
                    C Offline
                    C Offline
                    CruziX
                    wrote on last edited by
                    #9

                    @paul53 sagte in [Frage] Timer oder Interval in Funktion löschen:

                    @CruziX sagte:

                    Lösung für meine erste Frage?

                    In Javascript ist mir keine Methode zur Variablenübergabe per Referenz (Zeiger) bekannt.
                    Wenn man viele Timer verwendet, fällt mir nur die Array-Methode ein.

                    var timers = [];
                    
                    function clearT(i){
                       clearTimeout(timers[i]);
                       timers[i] = null;
                    }
                    
                    timers[0] = setTimeout(function() {
                        clearT(0);
                        log(timers[0]);
                    }, 1000);
                    

                    Ich hatte mal gelesen, in JavaScript werden alle primitiven Datentypen call by value und alle Objekte call by reference übergeben, aber vielleicht ist das auch falsch

                    paul53P 1 Reply Last reply
                    0
                    • MicM Mic

                      Erste Idee: ggf. könntest du auch alternativ das Objekt abfragen:

                      Ausgabe mytimeout-Variable nach clearTimeout(mytimeout): {"_called":false,"_idleTimeout":-1,"_idlePrev":null,"_idleNext":null,"_idleStart":81543485,"_onTimeout":null,"_timerArgs":[null,null,null,null],"_repeat":null,"_destroyed":false}
                      Typenprüfung mytimeout = null: object
                      Ausgabe mytimeout-Variable nach = null: null
                      
                      

                      Also etwa mytymeout._onTimemout (falls das der beste Objekt-Schlüssel hierfür ist) Also falls false, dann mach xxx

                      C Offline
                      C Offline
                      CruziX
                      wrote on last edited by
                      #10

                      @Mic Danke für den Tipp, werde ich mir mal anschauen.
                      Das tolle..
                      ich hab in einem global Skript 2 Funktionen zum Löschen von Timeouts und Intervallen, jetzt darf ich mir was überlegen :sweat_smile:
                      Ein paar Sachen haben nie wie gewünscht funktioniert und jetzt glaube ich, dass es daran lag :P

                      1 Reply Last reply
                      0
                      • C CruziX

                        @paul53 sagte in [Frage] Timer oder Interval in Funktion löschen:

                        @CruziX sagte:

                        Lösung für meine erste Frage?

                        In Javascript ist mir keine Methode zur Variablenübergabe per Referenz (Zeiger) bekannt.
                        Wenn man viele Timer verwendet, fällt mir nur die Array-Methode ein.

                        var timers = [];
                        
                        function clearT(i){
                           clearTimeout(timers[i]);
                           timers[i] = null;
                        }
                        
                        timers[0] = setTimeout(function() {
                            clearT(0);
                            log(timers[0]);
                        }, 1000);
                        

                        Ich hatte mal gelesen, in JavaScript werden alle primitiven Datentypen call by value und alle Objekte call by reference übergeben, aber vielleicht ist das auch falsch

                        paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #11

                        @CruziX sagte :

                        in JavaScript werden alle primitiven Datentypen call by value und alle Objekte call by reference übergeben

                        Das stimmt schon, weshalb man innerhalb einer Funktion auch die Attribute eines Objektes ändern kann, aber nicht das Objekt selbst. Im ersten Post ist time eine lokale Variable und es bewirkt nichts, diese auf null zu setzen.

                        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 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        747

                        Online

                        32.6k

                        Users

                        82.2k

                        Topics

                        1.3m

                        Posts
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Home
                        • Recent
                        • Tags
                        • Unread 0
                        • Categories
                        • Unreplied
                        • Popular
                        • GitHub
                        • Docu
                        • Hilfe