NEWS
getForeignState Funktion
-
Hallo, ich versuche mich gerade in der Adapterentwicklung und versuche mit getForeignState auf ein State unter 0_userdata.0.testNumber zuzugreifen.
Mein Code in der main.js onReady Funktion:this.getForeignState("0_userdata.0.testNumber", function (err, myState){ if (err) { this.log.error(err); } else { if(!myState){ this.log.info("Value empty"); } else { this.log.info("Value: " + myState.val); } } });Leider bekomme ich folgenden Fehler im Log:
2022-05-30 13:54:55.585 - error: test-project.0 (27966) uncaught exception: Cannot read properties of undefined (reading 'info') 2022-05-30 13:54:55.585 - error: test-project.0 (27966) TypeError: Cannot read properties of undefined (reading 'info') at Immediate.<anonymous> (/home/andy/ioBroker.test-project/.dev-server/default/node_modules/iobroker.test-project/main.js:64:15) at processImmediate (node:internal/timers:468:21) 2022-05-30 13:54:55.585 - error: test-project.0 (27966) Cannot read properties of undefined (reading 'info') 2022-05-30 13:54:55.586 - info: test-project.0 (27966) terminating 2022-05-30 13:54:55.586 - warn: test-project.0 (27966) Terminated (UNCAUGHT_EXCEPTION): Without reason [nodemon] app crashed - waiting for file changes before starting...Hat jemand eine Idee waren das liegen kann?
Danke und viele Grüße
-
Hallo, ich versuche mich gerade in der Adapterentwicklung und versuche mit getForeignState auf ein State unter 0_userdata.0.testNumber zuzugreifen.
Mein Code in der main.js onReady Funktion:this.getForeignState("0_userdata.0.testNumber", function (err, myState){ if (err) { this.log.error(err); } else { if(!myState){ this.log.info("Value empty"); } else { this.log.info("Value: " + myState.val); } } });Leider bekomme ich folgenden Fehler im Log:
2022-05-30 13:54:55.585 - error: test-project.0 (27966) uncaught exception: Cannot read properties of undefined (reading 'info') 2022-05-30 13:54:55.585 - error: test-project.0 (27966) TypeError: Cannot read properties of undefined (reading 'info') at Immediate.<anonymous> (/home/andy/ioBroker.test-project/.dev-server/default/node_modules/iobroker.test-project/main.js:64:15) at processImmediate (node:internal/timers:468:21) 2022-05-30 13:54:55.585 - error: test-project.0 (27966) Cannot read properties of undefined (reading 'info') 2022-05-30 13:54:55.586 - info: test-project.0 (27966) terminating 2022-05-30 13:54:55.586 - warn: test-project.0 (27966) Terminated (UNCAUGHT_EXCEPTION): Without reason [nodemon] app crashed - waiting for file changes before starting...Hat jemand eine Idee waren das liegen kann?
Danke und viele Grüße
@garfunkel
Der Callback wird nicht im Kontext von Deinem Adapter aufgerufen, i.e., this im Callback ist nicht die Adapter-Instanz, deswegen this.log ist undefined.Mach einfach so was wie:
let self = this; this.getForeignState("...", function(err, myState) { .... self.log.info("....") }) -
@garfunkel
Der Callback wird nicht im Kontext von Deinem Adapter aufgerufen, i.e., this im Callback ist nicht die Adapter-Instanz, deswegen this.log ist undefined.Mach einfach so was wie:
let self = this; this.getForeignState("...", function(err, myState) { .... self.log.info("....") }) -
@garfunkel
Freut mich. Viel Spaß beim Adapter-n ;) -
@garfunkel
Freut mich. Viel Spaß beim Adapter-n ;) -
Hallo, ich versuche mich gerade in der Adapterentwicklung und versuche mit getForeignState auf ein State unter 0_userdata.0.testNumber zuzugreifen.
Mein Code in der main.js onReady Funktion:this.getForeignState("0_userdata.0.testNumber", function (err, myState){ if (err) { this.log.error(err); } else { if(!myState){ this.log.info("Value empty"); } else { this.log.info("Value: " + myState.val); } } });Leider bekomme ich folgenden Fehler im Log:
2022-05-30 13:54:55.585 - error: test-project.0 (27966) uncaught exception: Cannot read properties of undefined (reading 'info') 2022-05-30 13:54:55.585 - error: test-project.0 (27966) TypeError: Cannot read properties of undefined (reading 'info') at Immediate.<anonymous> (/home/andy/ioBroker.test-project/.dev-server/default/node_modules/iobroker.test-project/main.js:64:15) at processImmediate (node:internal/timers:468:21) 2022-05-30 13:54:55.585 - error: test-project.0 (27966) Cannot read properties of undefined (reading 'info') 2022-05-30 13:54:55.586 - info: test-project.0 (27966) terminating 2022-05-30 13:54:55.586 - warn: test-project.0 (27966) Terminated (UNCAUGHT_EXCEPTION): Without reason [nodemon] app crashed - waiting for file changes before starting...Hat jemand eine Idee waren das liegen kann?
Danke und viele Grüße
@garfunkel sagte in getForeignState Funktion:
Hat jemand eine Idee waren das liegen kann?
Das liegt am Scope der Callback-Funktion. Best-Practice ist daher Arrow Functions zu nutzen, damit
thiserhalten bleibt und man keine Workarounds wielet self = this;machen muss. So würde es funktionieren:this.getForeignState("0_userdata.0.testNumber", (err, myState) => { if (err) { this.log.error(err); } else { if(!myState){ this.log.info("Value empty"); } else { this.log.info("Value: " + myState.val); } } });Siehe auch: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
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