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. JavaScript
  5. [Frage] Timer oder Interval in Funktion löschen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    153

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

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

[Frage] Timer oder Interval in Funktion löschen

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 3 Kommentatoren 541 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.
  • 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antworten Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • MicM Offline
          MicM Offline
          Mic
          Developer
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              0
              • MicM Offline
                MicM Offline
                Mic
                Developer
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 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

                      380

                      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