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
-
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 -
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden