NEWS
[Gelöst] clearInterval will nicht so wie ich
-
Hallo, ihr Lieben.
Hätte mal wieder ein kleines Problem. Ich bemühe mich grad wirklich, in JS durchzusteigen, aber das ist (und bleibt wohl) ein Buch mit 7 Siegeln.
Also, ich würde mit setInterval gerne eine Schleife erstellen. Da meine Versuche bisher (mit dem Hauptzweck) viel zu wirr und unübersichtlich (und fehlerbehaftet) waren, habe ich erstmal ein kleines Testskript geschrieben, um überhaupt ein Gespür für setInterval zu bekommen. Dieses soll alle 3 Sek abhängig eines Datenpunktwertes (1, 2, oder eine andere Zahl) ins log eintragen:
"ist ne Eins", "ist ne Zwei", "Aus die Maus" (Für jede Zahl ausser 1+2) und generell "Änderung" bei jeder Änderung.
soweit klappt alles, nur die clearInterval-Funktion will einfach nicht… je nachdem, wohin ich sie setzte wird sie scheinbar einfach ignoriert bzw. bringt bereits im Skript ne Meldung.
Sobald ich die Zahl im Datenpunkt ändere (z.B. von 1 auf 2) kommt zwar "Änderung", aber es laufen "Es ist ne Eins" und "Es ist ne Zwei" parallel weiter.
Vielleicht kann mir jemand sagen, wie man das hier besser hinbekommt?
! ````
var Datenpunkt = "javascript.0.GardenspotsColor.Gardentime"/Gardentime/;
! function Text1() {
console.log('Ist ne Eins');
}
! function Text2() {
console.log('Ist ne Zwei');
}
! on(Datenpunkt, function (data) {
console.log ('Änderung');
clearInterval (timer1);
clearInterval (timer2);if (data.state.val == 1) { var timer1 = setInterval (Text1, 3000);
}
! else if (data.state.val == 2) {
var timer2 = setInterval (Text2, 3000);
}else { console.log ('Aus die Maus');
}
});Danke schonmal
-
Deklarier mal die Timer-Variablen außerhalb einer Funktion:
! ````
var Datenpunkt = "javascript.0.GardenspotsColor.Gardentime"/Gardentime/;
! function Text1() {
console.log('Ist ne Eins');
}
! function Text2() {
console.log('Ist ne Zwei');
}
! var timer1 = null;
var timer2 = null;
! on(Datenpunkt, function (data) {
console.log ('Änderung');
if(timer1) clearInterval (timer1);
if(timer2) clearInterval (timer2);if (data.state.val == 1) { timer1 = setInterval (Text1, 3000); }
! else if (data.state.val == 2) {
timer2 = setInterval (Text2, 3000);
}else { console.log ('Aus die Maus'); }
});
-
Hallo,
ich hab das mal ausprobiert. Kann es daran liegen das du versuchst die Timer zu clearen, diese aber noch gar nicht deklariert sind. Versuch mal die Variablendeklaration vor dem ersten function(). Damit funktioniert es bei mir.
! ````
createState("javascript.0.GardenspotsColor.Gardentime");
var Datenpunkt = "javascript.0.GardenspotsColor.Gardentime"/Gardentime/;
var timer1, timer2;
function Text1() {
console.log('Ist ne Eins');
}
! function Text2() {
console.log('Ist ne Zwei');
}
! on(Datenpunkt, function (data) {
console.log ('Änderung');
clearInterval (timer1);
clearInterval (timer2);
if (data.state.val == 1) {
timer1 = setInterval (Text1, 3000);}
! else if (data.state.val == 2) {
timer2 = setInterval (Text2, 3000);}
else { console.log ('Aus die Maus');
}
!
});
! ```` -
OK, da war ich etwas zu langsam
Und die if (timer1)… Abfrage hab ich auch nicht drin. Wieder was gelernt.
-
Vielen herzlichen Dank schonmal.
Die Timer-Variablen an den Anfang zu setzten hatte ich tatsächlich schon versucht, aber halt nicht mit "= null" oder leer, sondern gleich mit setInterval. Da wurden die aber immer sofort ausgeführt… Auf sowas wie die Deklaration muß man als Laie erst mal kommen (hab ich aus Beispielen auch nie verständlich rausgelesen...)
Das if bei clearInterval hatte ich auch schon probiert, aber kann ja nicht gehen, wenn die Timer nicht richtig funktionieren...
Wunderbar, da kann ich jetzt mal weiter dran arbeiten und mein eigentliches Script neu entwerfen/überarbeiten...
Puh, ich glaub, für die JS-Logik bin ich zu alt... :mrgreen: