NEWS
js asynchron Problem
-
Hallo,
wie kann man dieses Problem am elegantesten lösen?Hier schalte ich das Gartenwasser ein, bzw. über VIS:
// GW EIN setState("mqtt.0.haus.keller.HumiFan.Setpoints.Gartenwasser",'true')
unmittelbar danach steht folgender Code:
// Schaltet Gartenwasser Timer ein wenn GW aus war, schaltet Gartenwasser aus wenn GW ein war // GW TIMER var update; on({id: "mqtt.0.haus.keller.HumiFan.Setpoints.Gartenwasser", change: "ne"}, function (obj) { if ( obj.state.val == true){ clearTimeout(update); update = setTimeout(function () { // Ausschalt Timer setState("mqtt.0.haus.keller.HumiFan.Setpoints.Gartenwasser", 'false'); // Gartenwasser ausschalten },30 * 60 * 1000); // Ausschaltzeit in ms 30 * 60 * 1000 } else { clearTimeout(update); setState("mqtt.0.haus.keller.HumiFan.Setpoints.Gartenwasser", 'false'); // Gartenwasser ausschalten } });
Das Problem ist nun:
Wenn ich mit "GW EIN" das Gartenwasser einschalte, dann wird es sofort danach
mit "// GW TIMER" wieder ausgeschaltet, weil der setState noch nicht ausgeführt worden ist.Ich hoffe, es gibt eine kurze und übersichtliche Lösung dafür, alles was mir bisher dazu eingefallen ist
sieht fürchterlich umständlich und unübersichtlich aus. -
@hanss sagte:
wird es sofort danach mit "// GW TIMER" wieder ausgeschaltet, weil der setState noch nicht ausgeführt worden ist.
Nein, weil immer der else-Zweig ausgeführt wird, denn 'true' ist nicht gleich true.
-
Hallo Paul,
Du hast wie immer recht.
Mein Problem ist 'true' oder true.
Schau dir bitte den Beitrag an:
https://forum.iobroker.net/topic/33480/js-mqtt-string-objekt-setstate-true-oder-trueIch meine, das ist mein eigentliches Problem.
Vielen Dank