NEWS
Adapter: Error Handling Frage
-
Hi,
siehe js-Controller issue 947: https://github.com/ioBroker/ioBroker.js-controller/issues/947
getForeignObjectAsync()wirft einen Fehler, wenn das ĂŒbergebende String nicht passt, aber nur wenn try/catch verwendet wird.
Ich persönlich tendiere dazu, Variablen, die ich an eine Funktion ĂŒbergebe, vorher schon zu validieren und dann auch innerhalb der Funktion abzubrechen und z.B. return=false zu machen falls nicht erfolgreich.
try/catch ist eher Neuland fĂŒr mich. Soll man jetzt unter node.js/Javascript jetzt echt alles auf "try/catch" basieren, und nur dann Fehler werfen, wenn catch erreicht wird?
Macht ja vieles einfacher, aber widerspricht meiner bisherigen Logik.
Eure Meinungen dazu?Ich bin kein JS Pro, daher frage ich :-)
Danke.
-
Hi,
siehe js-Controller issue 947: https://github.com/ioBroker/ioBroker.js-controller/issues/947
getForeignObjectAsync()wirft einen Fehler, wenn das ĂŒbergebende String nicht passt, aber nur wenn try/catch verwendet wird.
Ich persönlich tendiere dazu, Variablen, die ich an eine Funktion ĂŒbergebe, vorher schon zu validieren und dann auch innerhalb der Funktion abzubrechen und z.B. return=false zu machen falls nicht erfolgreich.
try/catch ist eher Neuland fĂŒr mich. Soll man jetzt unter node.js/Javascript jetzt echt alles auf "try/catch" basieren, und nur dann Fehler werfen, wenn catch erreicht wird?
Macht ja vieles einfacher, aber widerspricht meiner bisherigen Logik.
Eure Meinungen dazu?Ich bin kein JS Pro, daher frage ich :-)
Danke.
@Mic Der Fehler (UnhandeledPromiseRejection in diesem Fall) fliegt unabhÀngig vom try/catch. Ein Controller > 3 wird deinen Adapter dann auch sofort killen. Wenn du async/await nutzt, ist es in den meisten FÀllen sinnvoll, ein try/catch um deinen
await tueDiesDas()zu machen, da du nur so eine Promise Rejection fange kannst bei der Nutzung von async/await. Die Alternative sind klassische Promises a lagetForeignObjectAsync('tolleradapter.0.tollerstate').then(state => adapter.log.info(state.val)).catch(e => adapter.log.error('error caught: ' + e));oder Callbacks a la
getForeignObject('tolleradapter.0.tollerstate', (err, state) => { if (err) { adapter.log.error('error: ' + err); } else { adapter.log.warn(state.val); } setState('asasf', err => { // wir rĂŒcken immer weiter ein wenn etwas synchron passieren muss -> Callback Hell }); });Die Logik ist bei den Promises, immer wenn ein Error Callback zurĂŒckgegeben wurde, wird das Promise nun rejected und muss in einer Form gefangen werden.
Ich persönlich finde async/await am schicksten + leserlichsten. async/await sind jedoch nur Promises in auĂergewöhnlicher Tarnung. ;-)
-
Hi,
siehe js-Controller issue 947: https://github.com/ioBroker/ioBroker.js-controller/issues/947
getForeignObjectAsync()wirft einen Fehler, wenn das ĂŒbergebende String nicht passt, aber nur wenn try/catch verwendet wird.
Ich persönlich tendiere dazu, Variablen, die ich an eine Funktion ĂŒbergebe, vorher schon zu validieren und dann auch innerhalb der Funktion abzubrechen und z.B. return=false zu machen falls nicht erfolgreich.
try/catch ist eher Neuland fĂŒr mich. Soll man jetzt unter node.js/Javascript jetzt echt alles auf "try/catch" basieren, und nur dann Fehler werfen, wenn catch erreicht wird?
Macht ja vieles einfacher, aber widerspricht meiner bisherigen Logik.
Eure Meinungen dazu?Ich bin kein JS Pro, daher frage ich :-)
Danke.
Ich hau mich nieder, das ist der 1.Beitrag wo ich keinen einzigen Satz verstehe.

-
Ich hau mich nieder, das ist der 1.Beitrag wo ich keinen einzigen Satz verstehe.

-
@Mic Der Fehler (UnhandeledPromiseRejection in diesem Fall) fliegt unabhÀngig vom try/catch. Ein Controller > 3 wird deinen Adapter dann auch sofort killen. Wenn du async/await nutzt, ist es in den meisten FÀllen sinnvoll, ein try/catch um deinen
await tueDiesDas()zu machen, da du nur so eine Promise Rejection fange kannst bei der Nutzung von async/await. Die Alternative sind klassische Promises a lagetForeignObjectAsync('tolleradapter.0.tollerstate').then(state => adapter.log.info(state.val)).catch(e => adapter.log.error('error caught: ' + e));oder Callbacks a la
getForeignObject('tolleradapter.0.tollerstate', (err, state) => { if (err) { adapter.log.error('error: ' + err); } else { adapter.log.warn(state.val); } setState('asasf', err => { // wir rĂŒcken immer weiter ein wenn etwas synchron passieren muss -> Callback Hell }); });Die Logik ist bei den Promises, immer wenn ein Error Callback zurĂŒckgegeben wurde, wird das Promise nun rejected und muss in einer Form gefangen werden.
Ich persönlich finde async/await am schicksten + leserlichsten. async/await sind jedoch nur Promises in auĂergewöhnlicher Tarnung. ;-)
@foxriver76
Danke fĂŒr deine ausfĂŒhrliche ErklĂ€rung :-)
In meiner bisherigen Programmierwelt anderer Script-Sprachen war ein Fehler immer schlecht, und man versuchte vorher abzufangen, was geht. Aber da muss ich in JS etwas umdenken...
try/error habe ich grundsĂ€tzlich in jeder (async)-Funktion drin, aber nur global. Ich werde nun bei Bedarf auch try/error auf spezifische Calls ausfĂŒhren, um im error besser darauf reagieren zu können.FĂŒr mich ist async/await auch am schönsten, macht es echt einfach und super leserlich. Ich muss als async/await-Einsteiger aber noch aufpassen, nicht zu ĂŒbertreiben, und genau zu entscheiden, wann ich "await" auch wirklich brauche, damit nix bremst.
@sigi234 @darkiop
Ach, so ging es mir auch, als ich das erste mal von Promises gelesen hatte
bluefox und Team sei dank, dass wir die "Probleme" im JavaScript-Adapter in JS und Blockly quasi nicht wahrnehmen, da vieles im Hintergrund des JS-Adapters bereits gerade gebogen wird.
Bei der Adapter-Programmierung geht es aber rauer zu, da ist man nicht abgefedert durch den JS-Adapter. AuĂerdem programmiert man fĂŒr viele und hat Verantwortung, da ist ein ganz anderes Error Handling usw. gefordert.
Und man muss darauf aufpassen, dass bei einem Funktionsaufruf was gutes zurĂŒckkommt, auch falls das erst zeitverzögert kommt (z.B. Auslesen einer Website, Datenpunkt abfragen, etc.). Diese Zeitverzögerung muss man handhaben im Code, weil der sonst weiter durchrattern wĂŒrde und bevor die Infos vorliegen, wĂ€re das Script schon durchlaufen. Da kommen jetzt Promises und async/await ins Spiel.
Gute Anlaufstelle: javascript.info: Promises, async/await -
@foxriver76
Danke fĂŒr deine ausfĂŒhrliche ErklĂ€rung :-)
In meiner bisherigen Programmierwelt anderer Script-Sprachen war ein Fehler immer schlecht, und man versuchte vorher abzufangen, was geht. Aber da muss ich in JS etwas umdenken...
try/error habe ich grundsĂ€tzlich in jeder (async)-Funktion drin, aber nur global. Ich werde nun bei Bedarf auch try/error auf spezifische Calls ausfĂŒhren, um im error besser darauf reagieren zu können.FĂŒr mich ist async/await auch am schönsten, macht es echt einfach und super leserlich. Ich muss als async/await-Einsteiger aber noch aufpassen, nicht zu ĂŒbertreiben, und genau zu entscheiden, wann ich "await" auch wirklich brauche, damit nix bremst.
@sigi234 @darkiop
Ach, so ging es mir auch, als ich das erste mal von Promises gelesen hatte
bluefox und Team sei dank, dass wir die "Probleme" im JavaScript-Adapter in JS und Blockly quasi nicht wahrnehmen, da vieles im Hintergrund des JS-Adapters bereits gerade gebogen wird.
Bei der Adapter-Programmierung geht es aber rauer zu, da ist man nicht abgefedert durch den JS-Adapter. AuĂerdem programmiert man fĂŒr viele und hat Verantwortung, da ist ein ganz anderes Error Handling usw. gefordert.
Und man muss darauf aufpassen, dass bei einem Funktionsaufruf was gutes zurĂŒckkommt, auch falls das erst zeitverzögert kommt (z.B. Auslesen einer Website, Datenpunkt abfragen, etc.). Diese Zeitverzögerung muss man handhaben im Code, weil der sonst weiter durchrattern wĂŒrde und bevor die Infos vorliegen, wĂ€re das Script schon durchlaufen. Da kommen jetzt Promises und async/await ins Spiel.
Gute Anlaufstelle: javascript.info: Promises, async/await@Mic sagte in Adapter: Error Handling Frage:
Gute Anlaufstelle: javascript.info: Promises, async/await
Auch hilfreich zur Umstellung, könnte https://gist.github.com/AlCalzone/d14b854b69ce5e8a03718336cc650a95 sein.
FĂŒr mich ist async/await auch am schönsten, macht es echt einfach und super leserlich. Ich muss als async/await-Einsteiger aber noch aufpassen, nicht zu ĂŒbertreiben, und genau zu entscheiden, wann ich "await" auch wirklich brauche, damit nix bremst.
Du kannst durchaus auch mehrere Promises parallel laufen lassen und erst nachdem alle ausgefĂŒhrt worden sind, weiter machen, via
Promise.all
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