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. setTimeout und Skript-Neustart

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

setTimeout und Skript-Neustart

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 4 Kommentatoren 401 Aufrufe 4 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.
  • A Offline
    A Offline
    antimon
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich hätte mal eine Frage... was passiert eigentlich, wenn gerade bei den Skripten eine Funktion mit setTimeout() auf ihre Ausführung wartet und ich das Skript neu starte? Werden die laufenden Timer zurückgesetzt? Falls nein, gibt es irgendeine Möglichkeit, dies sauber durchzuführen?

    Ich habe das Gefühl, dass bei mir ständig beim Debuggen irgendwelche im Hintergrund laufende Timer reinpfuschen...

    Great SUNG 1 Antwort Letzte Antwort
    0
    • A antimon

      Hallo zusammen,

      ich hätte mal eine Frage... was passiert eigentlich, wenn gerade bei den Skripten eine Funktion mit setTimeout() auf ihre Ausführung wartet und ich das Skript neu starte? Werden die laufenden Timer zurückgesetzt? Falls nein, gibt es irgendeine Möglichkeit, dies sauber durchzuführen?

      Ich habe das Gefühl, dass bei mir ständig beim Debuggen irgendwelche im Hintergrund laufende Timer reinpfuschen...

      Great SUNG Offline
      Great SUNG Offline
      Great SUN
      schrieb am zuletzt editiert von
      #2

      @antimon Das kommt sicher auf den Kontext an, in dem Dein Timer läuft.
      Als Beisiel kannst Du aus einem Script heraus das Script selbst nicht neu starten, weil der Timer mit dem Beenden des Scripts auch weg ist.
      Du kannst aber ausserhalb des Scripts Timer haben, die auf Datenpunkte reagieren, die vom Script erzeugt wurden, oder die timeouts einfach anders verankern.

      So hab ich das bis jetzt zumindest immer wahrgenommen.

      Vielleicht kann ja @apollon77 mehr dazu sagen?!

      A 1 Antwort Letzte Antwort
      0
      • Great SUNG Great SUN

        @antimon Das kommt sicher auf den Kontext an, in dem Dein Timer läuft.
        Als Beisiel kannst Du aus einem Script heraus das Script selbst nicht neu starten, weil der Timer mit dem Beenden des Scripts auch weg ist.
        Du kannst aber ausserhalb des Scripts Timer haben, die auf Datenpunkte reagieren, die vom Script erzeugt wurden, oder die timeouts einfach anders verankern.

        So hab ich das bis jetzt zumindest immer wahrgenommen.

        Vielleicht kann ja @apollon77 mehr dazu sagen?!

        A Offline
        A Offline
        antimon
        schrieb am zuletzt editiert von
        #3

        @great-sun Danke für deine Antwort!
        Mir gehts gar nicht darum, dass irgendwelche Timer überleben sollen oder so - ganz im Gegenteil. Ich möchte beim Neustart des Skriptes (nicht der Instanz) keine verwaisten Timer übrig haben. Ich gehe mal davon aus, dass die automatisch bereinigt werden, aber ich kenne die Mechanismen dahinter nicht - out-of-the-Box ist es ja bei Javascript nicht möglich, alle Timer, die irgendwo existieren, abzufragen.

        Also was passiert zum Beispiel, wenn ich ein setTimeout(tueIrgendwas, 365 * 24 * 3600 * 1000); laufen lasse? Die Funktion tueIrgendwas wird theoretisch erst in einem Jahr aufgerufen. Jetzt speichere ich das Skript, weil ich was geändert habe - was passiert mit dem Timeout? Theoretisch darf der Code gar nicht mehr laufen, da sich das Skript ja verändert hat... aber bleibt da noch evtl. ein Rest im Speicher und führt zu irgendwelchen komischen Ergebnissen?

        Great SUNG 1 Antwort Letzte Antwort
        0
        • A antimon

          @great-sun Danke für deine Antwort!
          Mir gehts gar nicht darum, dass irgendwelche Timer überleben sollen oder so - ganz im Gegenteil. Ich möchte beim Neustart des Skriptes (nicht der Instanz) keine verwaisten Timer übrig haben. Ich gehe mal davon aus, dass die automatisch bereinigt werden, aber ich kenne die Mechanismen dahinter nicht - out-of-the-Box ist es ja bei Javascript nicht möglich, alle Timer, die irgendwo existieren, abzufragen.

          Also was passiert zum Beispiel, wenn ich ein setTimeout(tueIrgendwas, 365 * 24 * 3600 * 1000); laufen lasse? Die Funktion tueIrgendwas wird theoretisch erst in einem Jahr aufgerufen. Jetzt speichere ich das Skript, weil ich was geändert habe - was passiert mit dem Timeout? Theoretisch darf der Code gar nicht mehr laufen, da sich das Skript ja verändert hat... aber bleibt da noch evtl. ein Rest im Speicher und führt zu irgendwelchen komischen Ergebnissen?

          Great SUNG Offline
          Great SUNG Offline
          Great SUN
          schrieb am zuletzt editiert von
          #4

          @antimon Ich hab leider zu wenig Ahnung von den Tiefen bei js/node.js aber @apollon77 wird da sicher mehr zu sagen können.
          Wenn es wie bei Python etc. ist, sollten alle generierten Objekte automatisch wegfallen. 100% sicher bin ich nicht. Aber das lässt sich doch mit einem Test ganz einfach nachstellen... Ich bin jetzt nur leider schon weg vom Rechner, sonst hätte ich das kurz gemacht.

          1 Antwort Letzte Antwort
          0
          • apollon77A Online
            apollon77A Online
            apollon77
            schrieb am zuletzt editiert von
            #5

            Also generell gilt das Timer die per setTimeout gesetzt werden am Ende automatisch geglättet werden wenn das Skript stoppt.

            Problematisch sind ggf eher eigene Ressourcen wie ne selbst auf gemachte socket Verbindung oder so. Aber dafür gibts onStop wo du einen handler angeben kannst der bei dir aufräumt wenn das Skript gestoppt wird. Wenn du gaaaanz sicher sein willst (oder dem automatismus nicht traust ;-)) ) kannst du auch da selbst aufräumen.

            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
            A 1 Antwort Letzte Antwort
            0
            • apollon77A apollon77

              Also generell gilt das Timer die per setTimeout gesetzt werden am Ende automatisch geglättet werden wenn das Skript stoppt.

              Problematisch sind ggf eher eigene Ressourcen wie ne selbst auf gemachte socket Verbindung oder so. Aber dafür gibts onStop wo du einen handler angeben kannst der bei dir aufräumt wenn das Skript gestoppt wird. Wenn du gaaaanz sicher sein willst (oder dem automatismus nicht traust ;-)) ) kannst du auch da selbst aufräumen.

              A Offline
              A Offline
              antimon
              schrieb am zuletzt editiert von
              #6

              @apollon77 Das ist schon mal beruhigend, wenns da nen Automatismus gibt... :)
              Auf welchem Objekt kann man die onStop denn aufrufen bzw. registrieren?

              AlCalzoneA 1 Antwort Letzte Antwort
              0
              • A antimon

                @apollon77 Das ist schon mal beruhigend, wenns da nen Automatismus gibt... :)
                Auf welchem Objekt kann man die onStop denn aufrufen bzw. registrieren?

                AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                schrieb am zuletzt editiert von
                #7

                @antimon Das ist eine Funktion, die im Skript-Kontext global verfügbar ist.

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

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


                Support us

                ioBroker
                Community Adapters
                Donate

                663

                Online

                32.6k

                Benutzer

                82.2k

                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