NEWS
JavaScript Syntax Verstaendnisproblem
-
@codierknecht habe es gerade versucht, erst wenn die Funktion "on change" ausgeklammert ist funktionert es..
oder gibt es eine bessere Methode? z.B einen alle 60sec loop? -
@neueklasse das ganze reagiert natürlich nur wenn sich etwas ändert. Vorher passiert nichts. Also der Wert des Datenpunktes muss sich verändern (du hast
change
angegeben). Der Wert muss erst z.B. 17 werden um dann wieder 18 zu werdenSchreib mal folgendes in die Zeile vor dem
if
console.warn("obj.state.val: " + obj.state.val);
Das gibt er dir dann eine Warnmeldung mit dem aktuellen Wert im Log aus, siehst du unten dann in Orange (oder im Log)
-
@paul53 sagte in JavaScript Syntax Verstaendnisproblem:
Javascript kennt keine Integer.
Eines meiner Probleme mit untypisierten Sprachen
Ich könnte auch schreiben "doofe Sprache" ... aber dann gibt's wieder Haue. -
@bananajoe ok, alles klar, gerade getestet, jetzt funktioniert alles wie es soll!
gibt es die möglichkeit 2 States abzufragen?
on({id: idRobotState || idResetButton, change: "ne"}, async function (obj) { if(obj.state.val == 18) || (obj.state.val == 1) {
-
@codierknecht sagte in JavaScript Syntax Verstaendnisproblem:
@paul53 sagte in JavaScript Syntax Verstaendnisproblem:
Javascript kennt keine Integer.
Eines meiner Probleme mit untypisierten Sprachen
Ich könnte auch schreiben "doofe Sprache" ... aber dann gibt's wieder Haue.gib TypeScript eine Chance?
-
@neueklasse sagte: gibt es die möglichkeit 2 States abzufragen?
Ja, dann aber nicht mit obj.state.val.
on({id: [idRobotState, idResetButton], change: "ne"}, async function (obj) { if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
oder
on({id: [idRobotState, idResetButton], change: "ne"}, async function (obj) { if(obj.id == idRobotState && obj.state.val == 18 || obj.id == idResetButton && obj.state.val == 1) {
-
dann wird hierbei (beim ersten) das (obj) nichtmehr benoetigt? zumindestens wird es laut script nicht mehr abgefragt
(grau) -
@neueklasse sagte: dann wird hierbei das (obj) nichtmehr benoetigt?
Wenn man getState() verwendet, wird obj nicht benötigt.
Im nachträglichen 2. Beispiel wird obj benötigt. Das 2. Beispiel ist übrigens effizienter - auch wenn es nicht so aussieht. -
@paul53 das heisst man koennte das "on change" vereinfachen? das einfache weglassen von async function (obj) endet bei mir im Fehler. (beim ersten Beispiel)
-
@neueklasse sagte: vereinfachen?
Ja, dann aber so:
on([idRobotState, idResetButton], function () { // triggert bei Wertänderung eines DP if(getState(idRobotState).val == 18 || getState(idResetButton).val == 1) {
-
@neueklasse sagte in JavaScript Syntax Verstaendnisproblem:
das einfache weglassen von async function (obj) endet bei mir im Fehler.
Das kannst Du selbstverständlich nicht einfach weglassen.
Wenn überhaupt, dann kannst Du lediglich dasobj
als Parameter der anonymen Methode weglassen.
Ich würde es aber nicht entfernen wollen - man kann ich auch "kaputt optimieren".
Das wird ja (zumindest nach meinem Verständnis) lediglich die Adresse eines Objektes übergeben. Die wegzulassen bringt jetzt nicht wirklich Vorteile. -
@paul53 Vereinfachen im Sinne von "kuerzen" wie du aber sagst ist das 2. Beispiel effizienter oder....... "richtiger"?
-
@neueklasse sagte: 2. Beispiel effizienter oder....... "richtiger"?
Richtig sind beide. Im 2. Beispiel wird direkt auf eine bereits vorliegende Objekt-Variable zugegriffen und keine komplexe Funktion aufgerufen.
-
@paul53
Ist das wieder so eine JS-Eigenart, dass die als Parameter übergebene Methode keine bestimmte Signatur haben muss? Oder gibt's davon mehrere überladene Versionen?Was bringt das weglassen von
async
.... und warum kann man auch das einfach weglassen? -
@codierknecht sagte: async .... und warum kann man auch das einfach weglassen?
async
benötigt man nur, wenn man innerhalb der Funktion mitawait
arbeiten will.@codierknecht sagte in JavaScript Syntax Verstaendnisproblem:
die als Parameter übergebene Methode keine bestimmte Signatur haben muss? Oder gibt's davon mehrere überladene Versionen?
Ich verstehe nicht, was mit Signatur gemeint ist: Bin kein ITler.
-
@paul53
"Signatur" ist quasi der Aufbau der zu übergebenden Methode.
Wenn in meiner Welt als Parameter eine anonyme Methode übergeben werden kann, muss die bestimmte Eigenschaften haben. Also z.B. einen Parameter (eines bestimmten Typen) entgegennehmen.
Und in meiner (typisierten) Welt auch noch einen bestimmten Typen zurückgeben. Was ja in JS entfällt.
In meiner Welt ist also vorher festgelegt, dass die anonyme Methode einen Parameter (in diesem Fall vom Typ "Objekt") erwartet. Wird der nicht mitgeliefert, meckert mein Compiler.
Es sei denn, es gibt 2 überladene Versionen der Ereignisbehandlung (Trigger): Einmal mit und einmal ohne Parameter.Mich wundert halt nur, warum man den Parameter einfach weglassen kann.
Dass das so einfach geht ist ja nicht unbedingt von Nachteil. -
@codierknecht sagte: Mich wundert halt nur, warum man den Parameter einfach weglassen kann.
Warum nicht - wenn man ihn nicht benötigt.
Der Parameter ist keine Referenz auf ein bereits bestehendes Objekt, sondernobj
liefert neben dem statischen Datenpunkt-Objekt den Zustand, den vorherigen Zustand und weitere Informationen (u.a. deviceName, channelName). Das Weglassen spart also RAM.