Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker 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.9k

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

Adapter: Error Handling Frage

Geplant Angeheftet Gesperrt Verschoben Entwicklung
javascriptnode jserror handling
6 Beiträge 4 Kommentatoren 771 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • MicM Offline
    MicM Offline
    Mic
    Developer
    schrieb am zuletzt editiert von
    #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 Antworten Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              753

              Online

              32.4k

              Benutzer

              81.4k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe