NEWS
getState liefert anders Ergebnis als bei Objekt
-
Ich habe eine Liste mit Elementen als Objekt abglegt. "0_userdata.0.Strom.Strom_Tageswerte"
[11.5,10.64,10.47,10.6,10.72,11.84,15.01,16.37,17.17,14.93,13.95,12.92,12,11.22,10.63,10.61,11.92,14.04,15.01,17.1,17.32,17.74,15.9,15]
Wenn ich dann bei diese Liste auslese, als liste_test abspeichere und auf Element 2, 100 drauf schreibe. Wird scheinbar auch die liste von "0_userdata.0.Strom.Strom_Tageswerte" geändert
liste_test = getState("0_userdata.0.Strom.Strom_Tageswerte").val
liste_test[2]=100;
console.info(getState("0_userdata.0.Strom.Strom_Tageswerte").val);
console.info(liste_test);Ergebins im log
javascript.0 09:42:46.741 info[
11.5, 10.64, 100, 10.6,
10.72, 11.84, 15.01, 16.37,
17.17, 14.93, 13.95, 12.92,
12, 11.22, 10.63, 10.61,
11.92, 14.04, 15.01, 17.1,
17.32, 17.74, 15.9, 15
]javascript.0 09:42:46.741 info
[
11.5, 10.64, 100, 10.6,
10.72, 11.84, 15.01, 16.37,
17.17, 14.93, 13.95, 12.92,
12, 11.22, 10.63, 10.61,
11.92, 14.04, 15.01, 17.1,
17.32, 17.74, 15.9, 15]Hat jemand eine Idee warum das so ist. Im Objektbaum sehe ich nach wie vor die ursprüngliche Liste.
Wenn ich denn JavaScrip Adapter neu startet liefert getState auch wieder das richtige ergebnis. -
Ich habe eine Liste mit Elementen als Objekt abglegt. "0_userdata.0.Strom.Strom_Tageswerte"
[11.5,10.64,10.47,10.6,10.72,11.84,15.01,16.37,17.17,14.93,13.95,12.92,12,11.22,10.63,10.61,11.92,14.04,15.01,17.1,17.32,17.74,15.9,15]
Wenn ich dann bei diese Liste auslese, als liste_test abspeichere und auf Element 2, 100 drauf schreibe. Wird scheinbar auch die liste von "0_userdata.0.Strom.Strom_Tageswerte" geändert
liste_test = getState("0_userdata.0.Strom.Strom_Tageswerte").val
liste_test[2]=100;
console.info(getState("0_userdata.0.Strom.Strom_Tageswerte").val);
console.info(liste_test);Ergebins im log
javascript.0 09:42:46.741 info[
11.5, 10.64, 100, 10.6,
10.72, 11.84, 15.01, 16.37,
17.17, 14.93, 13.95, 12.92,
12, 11.22, 10.63, 10.61,
11.92, 14.04, 15.01, 17.1,
17.32, 17.74, 15.9, 15
]javascript.0 09:42:46.741 info
[
11.5, 10.64, 100, 10.6,
10.72, 11.84, 15.01, 16.37,
17.17, 14.93, 13.95, 12.92,
12, 11.22, 10.63, 10.61,
11.92, 14.04, 15.01, 17.1,
17.32, 17.74, 15.9, 15]Hat jemand eine Idee warum das so ist. Im Objektbaum sehe ich nach wie vor die ursprüngliche Liste.
Wenn ich denn JavaScrip Adapter neu startet liefert getState auch wieder das richtige ergebnis.Das 2. Element ist doch 100.
JavaScript fängt mit 0 zum zählen bei arrays an.
Also 0,1,2….Gib mal direkt nach dem lesen und vor dem ändern noch die Liste aus. Nur um sicher zu gehen.
Das ändern der variable löst eigentlich keine Änderung des datenpunkts aus. Da muss man schon bewusst schreiben.
Evtl ist es ein caching Problem -
-
https://www.geeksforgeeks.org/javascript/pass-by-value-and-pass-by-reference-in-javascript/
Das wäre dann aber ein Problem des Adapters
-
https://www.geeksforgeeks.org/javascript/pass-by-value-and-pass-by-reference-in-javascript/
Das wäre dann aber ein Problem des Adapters
@OliverIO Nein, das ist die Natur von JS. Die Zuweisung übergibt eine Referenz auf ein Objekt, darum sehen wir in beiden logs die 100. Das Objekt in diesem Fall ist aber nicht das, was man im Objektbaum sieht. Darum steht da auch noch der unveränderte Wert.
-
Wenn man den Javascript-Adapter nicht auf alle States subscribed, dürfte das so auch nicht auftreten, weil der Adapter dann keine eigenen Objekte auf die States vorhält. Man muss dann aber mit den async Funktionen von set/get State arbeiten.
-
Wenn man den Javascript-Adapter nicht auf alle States subscribed, dürfte das so auch nicht auftreten, weil der Adapter dann keine eigenen Objekte auf die States vorhält. Man muss dann aber mit den async Funktionen von set/get State arbeiten.
Aber der Adapter sollte so ja nicht reagieren.
Er sollte nur de-referenzierte Objekte herausgeben.
Höre ich zum ersten Mal das das im Adapter so ist. Das müsste doch vorher schon jemand aufgefallen sein -
Aber der Adapter sollte so ja nicht reagieren.
Er sollte nur de-referenzierte Objekte herausgeben.
Höre ich zum ersten Mal das das im Adapter so ist. Das müsste doch vorher schon jemand aufgefallen sein@OliverIO [sagte]: Höre ich zum ersten Mal das das im Adapter so ist.
Das war schon immer so. Die Variable liste_test zeigt in den Puffer der Javascript-Instanz.
@GeraldK66 sagte:
Im Objektbaum sehe ich nach wie vor die ursprüngliche Liste.Das ist die Liste im js-controller (Admin-Puffer). Wenn man die Liste mit setState("0_userdata.0.Strom.Strom_Tageswerte", liste_test, true) schreibt, stimmen beide Listen wieder überein.
-
@OliverIO [sagte]: Höre ich zum ersten Mal das das im Adapter so ist.
Das war schon immer so. Die Variable liste_test zeigt in den Puffer der Javascript-Instanz.
@GeraldK66 sagte:
Im Objektbaum sehe ich nach wie vor die ursprüngliche Liste.Das ist die Liste im js-controller (Admin-Puffer). Wenn man die Liste mit setState("0_userdata.0.Strom.Strom_Tageswerte", liste_test, true) schreibt, stimmen beide Listen wieder überein.
Das verstehe ich jetzt nicht
liste_test = getState("0_userdata.0.Strom.Strom_Tageswerte").val liste_test[2]=100; console.info(getState("0_userdata.0.Strom.Strom_Tageswerte").val); console.info(liste_test);Ich hab mir eine Liste erstellt und diese hier "0_userdata.0.Strom.Strom_Tageswerte" abgespeichert.
Nun wollte ich diese Liste mit getState auslesen und in eine lokale liste abspeichern, dann gewisse Elemente ändern und dann mit setState bei einen anderen Objekt abspeicher.
Es kommt mir aber komisch vor, dass getState("0_userdata.0.Strom.Strom_Tageswerte").val, das selbe Ergebnis liefert als liste_test.
Ich hab ja nur was bei liste_test geändert und nicht bei der ursprünglichen Liste. -
Das verstehe ich jetzt nicht
liste_test = getState("0_userdata.0.Strom.Strom_Tageswerte").val liste_test[2]=100; console.info(getState("0_userdata.0.Strom.Strom_Tageswerte").val); console.info(liste_test);Ich hab mir eine Liste erstellt und diese hier "0_userdata.0.Strom.Strom_Tageswerte" abgespeichert.
Nun wollte ich diese Liste mit getState auslesen und in eine lokale liste abspeichern, dann gewisse Elemente ändern und dann mit setState bei einen anderen Objekt abspeicher.
Es kommt mir aber komisch vor, dass getState("0_userdata.0.Strom.Strom_Tageswerte").val, das selbe Ergebnis liefert als liste_test.
Ich hab ja nur was bei liste_test geändert und nicht bei der ursprünglichen Liste.@GeraldK66 [sagte: nur was bei liste_test geändert und nicht bei der ursprünglichen Liste.
Du hast die Änderung im Puffer der Javascript-Instanz gemacht.
Will man eine Liste nur lokal bearbeiten, muss man sie erst in eine lokale Liste kopieren. -
@GeraldK66 [sagte: nur was bei liste_test geändert und nicht bei der ursprünglichen Liste.
Du hast die Änderung im Puffer der Javascript-Instanz gemacht.
Will man eine Liste nur lokal bearbeiten, muss man sie erst in eine lokale Liste kopieren. -
@paul53
Ich dachte mit diesem Befehl mach ich dasliste_test = getState("0_userdata.0.Strom.Strom_Tageswerte").val
ist liste_test nicht die lokale liste
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