NEWS
[Gelöst] Verständnis frage : Timeouts innerhalb Funktionen
-
Hi,
Kurz ne frage an die Profis.
Ich hatte ein script mit trigger und if-then Kontrolle nach einem bestimmten stats, wen ja eine function welche mit einem time-out nach 30 Minuten das system anschaltet.
Diesen timeout habe ich in die function hinterlegt, das clear time-out in der If-Then abfrage.
Bei true : starte function, innerhalb der Funktion ein time-out und dan schalten.
Bei False : stoppe de timer
Stimmt es das der time-out welcher in de function gesetzt wird nicht ausgeschaltet wird wen ich den clear time-out ausserhalb der function wieder bei der IF-Then abfrage triggere ?
Es ist mir aufgefallen das obwohl die if-abfrage FALSE war die Schaltung trotzdem erfolgte.
~Dutch
-
Kannst du mal deinen Code zeigen?
Ein Timer sollte sich immer innerhalb eines Skripts löschen lassen. Vorausgesetzt er hat einen eindeutigen Namen.
-
Du solltest eine variable im global scope definieren in welche du später dann das Timeout schreibst - so ist die Timeoutvariable im gesamten Skript verfügbar.
var timeout1; function nameFunction() { timeout1 = setTimeout( ...... ); } on(......) { if (.....) { nameFunction(); } else { clearTimeout(timeout1); } }
Gruß
-
Hmm der Fehler sitzt wohl an der Tastatur ich werde mein script nochmal gründlich überschauen.
Da dies ziemlich Gross ist haben ich zum Testen der timer und time reset mal ein einfacheres erstellt mit 2 scenarien:
-
timer_1 wird gestartet innerhalb einer function und reset über eine 2te function
-
Timer_2 wird gestartet innerhalb einer Function und reset innerhalb der IF abfrage
Beide timer und deren resets funktionieren wie erwartet, da hab ich mich bei dem anderen script wohl in der login verhauen.
Danke euch !
Mein Code wer es testen/nachspielen möchte :
var timeout_2, timeout_1; /** * TimeOut_Test_2 mit reset außerhalb der function */ function TimeOut_Test_2() { timeout_2 = setTimeout(function () { console.log('TimeOut_Test_2 activiert nach 10 sekunden'); }, 10000); } /** * TimeOut_Test_1 Timer innerhalb einer function */ function TimeOut_Test_1() { timeout_1 = setTimeout(function () { console.log('TimeOut_Test_1 activiert nach 10 sekunden'); }, 10000); } /** * TimeOut_Test_1 reset innerhalb einer function */ function TimeOut_Test_1_Clear() { (function () {if (timeout_1) {clearTimeout(timeout_1); timeout_1 = null;}})(); console.log('TimeOut_Test_1_deactiviert '); } on({id: "javascript.1.Test_Switch"/*Test_Switch*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.1.Test_Switch").val == true) { console.log('Timeout aktiviert starte nach 10 sekunden'); TimeOut_Test_1(); TimeOut_Test_2(); } else { (function () {if (timeout_2) {clearTimeout(timeout_2); timeout_2 = null;}})(); console.log('Timeout deactivieren'); TimeOut_Test_1_Clear(); } });
Log Ausgabe :
javascript.1 2018-04-25 13:26:08.036 info script.js.common.palletkachel.Test_Script_Timer: TimeOut_Test_1_deactiviert javascript.1 2018-04-25 13:26:08.035 info script.js.common.palletkachel.Test_Script_Timer: Timeout deactivieren javascript.1 2018-04-25 13:26:04.385 info script.js.common.palletkachel.Test_Script_Timer: Timeout aktiviert starte nach 10 sekunden
-