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');}
!
});
! ```` -
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:
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