NEWS
Timing issue createState --> setState trotz Callback
-
@paul53
Guter Punkt, kann nur dann kein 'ack' und 'expire' mitgeben -
@HGlab sagte:
kann nur dann kein 'ack' und 'expire' mitgeben
Wozu dient "expire" ?
Nach meiner Erfahrung macht es nur Probleme. -
@paul53
das JSON-Objekt hat Bäume und Blätter die optional sind. Da ich generisch durch das Objekt traversiere schreibe ich alles rein was da ist. Wenn etwas nicht mehr da ist läuft es ins expire.Mit folgender Ergänzung rennt es nun ohne Warnings durch - eigentlich gibt es dafür keinen Grund, aber so klappt es - warum auch immer!
if (existsObject(id) == false) { createState(id, '', creat_param, function (err,state) { if (err) log(err + ' | ' + state, 'error'); setState(id, { 'val': value, 'ack': true, 'expire': 5.1 * 60 }); }); } else { setState(id, { 'val': value, 'ack': true, 'expire': 5.1 * 60 }); }
-
@HGlab sagte:
Mit folgender Ergänzung rennt es nun ohne Warnings durch - eigentlich gibt es dafür keinen Grund
Der log-Befehl benötigt Zeit, sorgt also dafür dass setState() etwas später ausgeführt wird.
-
@HGlab Was sagt denn das Log nun?
-
@paul53
war auch ein Verdacht, es ist aber nur das "if", ist nie TRUE;
Wenn ich nurlog(err + ' | ' + state, 'error');
ohne if nehme, dann kommen die Fehler wieder. Sehr strange!
-
@UncleSam sagte in Timing issue createState --> setState trotz Callback:
@HGlab Was sagt denn das Log nun?
?
-
@UncleSam said in Timing issue createState --> setState trotz Callback:
@HGlab Was sagt denn das Log nun?
keine Fehler im Log; die CreateState funktionieren alle
siehe https://forum.iobroker.net/topic/40222/timing-issue-createstate-setstate-trotz-callback/4 -
@HGlab sagte:
ohne if nehme, dann kommen die Fehler wieder. Sehr strange!
Allerdings.
Möglicher Workaround wäre, die Funktion in einem Intervall (z.B. alle 200 ms) anstelle in einer Schleife aufzurufen, denn die JSON-Abfrage erfolgt anscheinend alle 5 Minuten. -
@paul53
Ich traversiere rekursiv durch das JSON Objekt und rufe für jedes Blatt die setStateCus-Methode auf.
Wüsste nicht wie ich das sinnvoll entkoppeln kann.
Hab auch schon setState mit 1000ms verzögert ausgeführt, auch das hat nichts geholfen.
Ich denke es liegt am Übergang zu Reddis. Reddis funktioniert ja auch asynchron und vermutlich stecken die "creates" noch in der Queue und werden teilweise von den setStates überholt.Vielleicht lege ich mal ein issue beim JS-Controller an...
-
@HGlab sagte in:
Vielleicht lege ich mal ein issue beim JS-Controller an...
Da gibt es bereits etwas.
-