Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] async/await auch im on() ?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] async/await auch im on() ?

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      ente34 last edited by ente34

      Ich beziehe mich auf diesen Post.
      Mein Frage, kann ich die Async-Funktionen auch im on() verwenden oder geht das (noch) nicht?

      F 1 Reply Last reply Reply Quote 0
      • F
        fastfoot @ente34 last edited by

        @ente34 sagte in async/await auch im on() ?:

        Ich beziehe mich auf diesen Post.
        Mein Frage, kann ich die Async-Funktionen auch im on() verwenden oder geht das (noch) nicht?

        ja, hier ein etwas sinnfreies Beispiel

        const idState = '0_userdata.0.example_state';
        
        on(idState, async function(obj) {
            await wait(100);
            log(obj.state.val);
        })
        
        // oder
        
        on(idState, async (obj) => {
            await wait(100);
            log(obj.state.val);
        })
        
        
        UncleSam 1 Reply Last reply Reply Quote 0
        • UncleSam
          UncleSam Developer @fastfoot last edited by UncleSam

          @fastfoot Einfach bedenken: du solltest immer den gesamten Inhalt der asynchronen Funktion, die du als Callback verwendest, in ein try ... catch schreiben, da eine Exception dort sonst zumindest das ganze Skript, wenn nicht den ganzen Adapter abstürzen lässt.

          Also sowas:

           
          on(idState, async (obj) => {
            try {
              await wait(100);
              log(obj.state.val);
            } catch (e) {
              log('Got an error: ' + e);
            }
          })
          
          F E 2 Replies Last reply Reply Quote 1
          • E
            ente34 last edited by

            @unclesam @fastfoot
            Ahhhh - man muss das async nur an die richtige Stelle schreiben.
            Vielen Dank!!!!

            1 Reply Last reply Reply Quote 0
            • F
              fastfoot @UncleSam last edited by fastfoot

              @unclesam sagte in async/await auch im on() ?:

              @fastfoot Einfach bedenken: du solltest immer den gesamten Inhalt der asynchronen Funktion, die du als Callback verwendest, in ein try ... catch schreiben, da eine Exception dort sonst zumindest das ganze Skript, wenn nicht den ganzen Adapter abstürzen lässt.

              Also sowas:

               
              on(idState, async (obj) => {
                try {
                  await wait(100);
                  log(obj.state.val);
                } catch (e) {
                  log('Got an error: ' + e);
                }
              })
              

              mhhmm, vielen Dank für den Hinweis! Aber würde/sollte man das tatsächlich auch in einem so einfachen Beispiel machen? Ich hätte eher gedacht dass man das macht wenn man ein JSON.parse() oder ähnliches anwendet. Und weil ich es gerne genau wissen möchte, gilt das dann auch für 'normale' callbacks ohne async, also on(id,(obj)=>{}) ? Bisher habe ich mir das immer erspart, zumindest wenn ich keinen Fehler erwartet habe, so wie im Beispiel. Aber ich lerne gerne dazu und bin deshalb für solche Hinweise sehr dankbar

              UncleSam 1 Reply Last reply Reply Quote 0
              • E
                ente34 @UncleSam last edited by

                @unclesam
                Das mit der Fehlerbehandlung stimmt, ohne reisst es den ganzen adapter runter, schon ausprobiert ...😊

                1 Reply Last reply Reply Quote 0
                • UncleSam
                  UncleSam Developer @fastfoot last edited by

                  @fastfoot sagte in [gelöst] async/await auch im on() ?:

                  Aber würde/sollte man das tatsächlich auch in einem so einfachen Beispiel machen?

                  Nein, natürlich nicht für ein "log", aber meistens macht man ja mehr als nur das in einem on-Handler. Und @ente34 schreibt es oben ja schon: es lohnt sich, immer ein try...catch rein zu tun.

                  Und weil ich es gerne genau wissen möchte, gilt das dann auch für 'normale' callbacks ohne async, also on(id,(obj)=>{}) ?

                  Ja, da ist es tatsächlich kein Problem da diese Exception abgefangen und geloggt wird. Aber eine "unhandled promise rejection", wie das heisst, kann leider nicht abgefangen werden.

                  F 1 Reply Last reply Reply Quote 1
                  • F
                    fastfoot @UncleSam last edited by

                    @unclesam sagte in [gelöst] async/await auch im on() ?:

                    Nein, natürlich nicht für ein "log", aber meistens macht man ja mehr als nur das in einem on-Handler.

                    ah, dann hatte ich deinen Tipp schon richtig eingeordnet

                    Und @ente34 schreibt es oben ja schon: es lohnt sich, immer ein try...catch rein zu tun.

                    ja, Fehlerbehandlung wird gerne vernachlässigt, auch von mir 😞 Meist baue ich sie erst ein, wenn ein Fehler schon eingetreten war und ich so darauf aufmerksam wurde. Da ist sicher noch Luft nach oben, Beiträge wie deiner helfen da sehr!

                    Und weil ich es gerne genau wissen möchte, gilt das dann auch für 'normale' callbacks ohne async, also on(id,(obj)=>{}) ?

                    Ja, da ist es tatsächlich kein Problem da diese Exception abgefangen und geloggt wird. Aber eine "unhandled promise rejection", wie das heisst, kann leider nicht abgefangen werden.

                    vor Grundlagen zu Promises habe ich mich bisher 'gedrückt', auch weil deren Handling durch die neuen iobroker xyzAsync Funktionen super easy scheint und auch ist. JS ist schon nicht einfach, ich sollte doch noch etwas erweiterte Grundlagen lernen

                    Nochmals Danke für deine Erläuterungen!

                    UncleSam 1 Reply Last reply Reply Quote 0
                    • UncleSam
                      UncleSam Developer @fastfoot last edited by

                      @fastfoot sagte in [gelöst] async/await auch im on() ?:

                      vor Grundlagen zu Promises habe ich mich bisher 'gedrückt', auch weil deren Handling durch die neuen iobroker xyzAsync Funktionen super easy scheint und auch ist. JS ist schon nicht einfach, ich sollte doch noch etwas erweiterte Grundlagen lernen

                      Schau dir diese gute Erklärung von unserem AlCalzone mal an:
                      https://gist.github.com/AlCalzone/d14b854b69ce5e8a03718336cc650a95

                      F 1 Reply Last reply Reply Quote 1
                      • F
                        fastfoot @UncleSam last edited by

                        @unclesam sagte in [gelöst] async/await auch im on() ?:

                        Schau dir diese gute Erklärung von unserem AlCalzone mal an:

                        Danke dir, die kannte ich schon und habe sie jetzt schon zwei- dreimal durch, aber lerne jedes mal etwas. Evtl. sollte ich die Beispiele mal mit konkretem Code beleben, so lerne ich halt am Besten. Gegen Ende schwirrt mir immer der Kopf 🙂 Verstanden habe ich es, aber um das zu verinnerlichen muss ich noch viel programmieren und üben

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        810
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        309
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo