Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Adapter: Error Handling Frage

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Adapter: Error Handling Frage

Scheduled Pinned Locked Moved Entwicklung
javascriptnode jserror handling
6 Posts 4 Posters 771 Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • MicM Offline
    MicM Offline
    Mic
    Developer
    wrote on last edited by
    #1

    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.

    foxriver76F sigi234S 2 Replies Last reply
    0
    • MicM Mic

      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.

      foxriver76F Offline
      foxriver76F Offline
      foxriver76
      Developer
      wrote on last edited by
      #2

      @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 la

      getForeignObjectAsync('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. 😉

      Videotutorials & mehr

      Hier könnt ihr mich unterstützen.

      MicM 1 Reply Last reply
      1
      • MicM Mic

        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.

        sigi234S Online
        sigi234S Online
        sigi234
        Forum Testing Most Active
        wrote on last edited by
        #3

        @Mic
        @foxriver76

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

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        D 1 Reply Last reply
        0
        • sigi234S sigi234

          @Mic
          @foxriver76

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

          D Offline
          D Offline
          darkiop
          Most Active
          wrote on last edited by
          #4

          @sigi234 ich hab ihn auch 2x gelesen, aber dann aufgegeben 😂

          Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

          1 Reply Last reply
          0
          • foxriver76F foxriver76

            @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 la

            getForeignObjectAsync('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. 😉

            MicM Offline
            MicM Offline
            Mic
            Developer
            wrote on last edited by Mic
            #5

            @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

            foxriver76F 1 Reply Last reply
            0
            • MicM Mic

              @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

              foxriver76F Offline
              foxriver76F Offline
              foxriver76
              Developer
              wrote on last edited by foxriver76
              #6

              @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

              Videotutorials & mehr

              Hier könnt ihr mich unterstützen.

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              736

              Online

              32.4k

              Users

              81.4k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe