NEWS
setTimeout und Skript-Neustart
-
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...
-
@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?!
-
@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?
-
@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. -
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.
-
@apollon77 Das ist schon mal beruhigend, wenns da nen Automatismus gibt...
Auf welchem Objekt kann man die onStop denn aufrufen bzw. registrieren? -
@antimon Das ist eine Funktion, die im Skript-Kontext global verfügbar ist.