Skip to content
  • Home
  • 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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Neu] Diverse async-Funktionen im JavaScript-Adapter

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

[Neu] Diverse async-Funktionen im JavaScript-Adapter

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
39 Beiträge 12 Kommentatoren 8.4k Aufrufe 17 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.
  • paul53P paul53

    @Mic
    Worin unterscheidet sich die Handhabung von getObjectAsync(id) von getObject(id) ?

    MicM Offline
    MicM Offline
    Mic
    Developer
    schrieb am zuletzt editiert von
    #5

    @paul53 sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

    @Mic
    Worin unterscheidet sich die Handhabung von getObjectAsync(id) von getObject(id) ?

    Hi Paul,

    bei const obj = getObject(id); können wir nicht sicher sein, dass obj in der nächsten Zeile schon gesetzt ist, das wissen wir nur sicher dann im callback von getObject(). Machen wir einige getObject() in einer Schleife z.B., kann das in einer Callback-Hölle enden.

    Mit getObjectAsync(id) viel schöner umzusetzen:

    const obj = await getObjectAsync(id);
    if(!obj) throw(`Hier Fehlertext`);
    // Hier gehts weiter und wir machen was mit 'obj'....
    
    paul53P 1 Antwort Letzte Antwort
    1
    • paul53P paul53

      @Mic
      Worin unterscheidet sich die Handhabung von getObjectAsync(id) von getObject(id) ?

      AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von AlCalzone
      #6

      @paul53 getObjectAsync (und die anderen neuen Funktionen) kapseln den Callback weg. Stattdessen wird der Rückgabewert als Ergebnis von await erhalten und Fehler können klassisch mit try-catch abgefangen werden.

      alt:

      getObject(id, (err, obj) => {
         // ... mit obj arbeiten oder err behandeln
      });
      // wird sofort ausgeführt
      

      neu:

      try {
        const obj = await getObjectAsync(id);
        // hier mit obj arbeiten
      } catch (err) {
        // hier Fehler behandeln
      }
      

      Außerdem ist das Verhalten von getStateAsync etc. unabhängig davon, ob der Haken "alle States abonnieren" in den Adapter-Einstellungen gesetzt ist. Es gibt nie einen Callback und es ist immer egal, ob die Werte im Hintergrund asynchron geladen werden oder nicht.

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Antwort Letzte Antwort
      3
      • MicM Mic

        @fastfoot

        Ist ein Fehler in meinem Beispiel, weil ich die Existenz des State-Wertes mit "!" abfrage, also per falsy, was bei 0 als Statewert false ergibt.
        Ich bessere oben auf die Schnelle nach und starte die Schleife ab 1 ;) Genau so kann man natürlich auch ab 0 starten und anders im if/else darauf abfragen...

        F Offline
        F Offline
        fastfoot
        schrieb am zuletzt editiert von
        #7

        @Mic sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

        @fastfoot

        Ist ein Fehler in meinem Beispiel, weil ich die Existenz des State-Wertes mit "!" abfrage, also per falsy, was bei 0 als Statewert false ergibt.
        Ich bessere oben auf die Schnelle nach und starte die Schleife ab 1 ;) Genau so kann man natürlich auch ab 0 starten und anders im if/else darauf abfragen...

        Danke, Anfängerfehler meinerseits, das nicht gesehen zu haben. :disappointed: Andererseits hatte ich es dann doch noch selbst rausgefunden:blush:

        iobroker läuft unter Docker auf QNAP TS-451+
        SkriptRecovery: https://forum.iobroker.net/post/930558

        1 Antwort Letzte Antwort
        1
        • MicM Mic

          @paul53 sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

          @Mic
          Worin unterscheidet sich die Handhabung von getObjectAsync(id) von getObject(id) ?

          Hi Paul,

          bei const obj = getObject(id); können wir nicht sicher sein, dass obj in der nächsten Zeile schon gesetzt ist, das wissen wir nur sicher dann im callback von getObject(). Machen wir einige getObject() in einer Schleife z.B., kann das in einer Callback-Hölle enden.

          Mit getObjectAsync(id) viel schöner umzusetzen:

          const obj = await getObjectAsync(id);
          if(!obj) throw(`Hier Fehlertext`);
          // Hier gehts weiter und wir machen was mit 'obj'....
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #8

          @Mic sagte:

          bei const obj = getObject(id); können wir nicht sicher sein, dass obj in der nächsten Zeile schon gesetzt ist

          getObject(id) arbeitet synchron, indem es auf den Puffer der Javascript-Instanz zugreift. Diese Version funktioniert natürlich nicht mit Haken bei "Nicht alle Zustände beim Start abonnieren".

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          AlCalzoneA hanssH 2 Antworten Letzte Antwort
          0
          • paul53P paul53

            @Mic sagte:

            bei const obj = getObject(id); können wir nicht sicher sein, dass obj in der nächsten Zeile schon gesetzt ist

            getObject(id) arbeitet synchron, indem es auf den Puffer der Javascript-Instanz zugreift. Diese Version funktioniert natürlich nicht mit Haken bei "Nicht alle Zustände beim Start abonnieren".

            AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #9

            @paul53 Ja, das Beispiel von @Mic war nicht gut ;) Dennoch ist es bei der Version mit xyzAsync egal, ob der Haken gesetzt ist oder nicht.

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            1 Antwort Letzte Antwort
            1
            • paul53P paul53

              @Mic sagte:

              bei const obj = getObject(id); können wir nicht sicher sein, dass obj in der nächsten Zeile schon gesetzt ist

              getObject(id) arbeitet synchron, indem es auf den Puffer der Javascript-Instanz zugreift. Diese Version funktioniert natürlich nicht mit Haken bei "Nicht alle Zustände beim Start abonnieren".

              hanssH Offline
              hanssH Offline
              hanss
              schrieb am zuletzt editiert von
              #10

              @paul53 sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

              getObject

              Bedeutet das, dass der js adapter zwangsläufig neu gestartet werden muß, wenn sich an den Aufzählungen etwas ändert?

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                stan23
                schrieb am zuletzt editiert von stan23
                #11

                Hallo,
                die neuen Möglichkeiten durchdie async-Funktionen hören sich toll an.

                Nun versuche ich gerade meine alten Callback-Höllen aufzuräumen :)

                Gibt es einen asynchronen Ersatz für exec oder muss man das mit Promises bauen?

                function fetchCropPictureMbCam () {
                    return new Promise((resolve) => {
                        cmd = `${wgetCmd} ${picturePathMbCam} ${mailboxCamURL}`;
                        exec(cmd, async function (error, stdout, stderr) {
                            log(`Exec: ${cmd}`);
                            log(`Exec: stdout: ${stdout}, stderr: ${stderr}, error: ${error}`);
                            cmd = `${imageMagickCmd} ${picturePathMbCam} ${imageMagickParams} ${picturePathMbCamCropped}`;
                            exec(cmd, async function (error, stdout, stderr) {
                                log(`Exec: ${cmd}`);
                                log(`Exec: stdout: ${stdout}, stderr: ${stderr}, error: ${error}`);
                                resolve();
                            });
                        });
                    });
                }
                
                
                subscribe({id: dpMailboxFlap, change: "ne", val: 'open'}, async function(obj) {
                    log('Mailbox: Flap has been opened');
                
                    setState(dpMailboxFillState, eMailboxFillState.filled, true);
                    /* wait 5 seconds so that letters can be thrown in */
                    await wait(5000);
                    await fetchCropPictureMbCam();
                    sendTo('pushover.0', 'send',  {
                        title: 'Briefkasten',
                        message: "Es wurde Post eingeworfen.",
                        file: picturePathMbCamCropped,
                    });
                });
                
                

                EDIT:
                ist das so richtig? das resolve() kommt an die Stelle wenn die Callbacks fertig sind?

                Viele Grüße
                Marco

                AlCalzoneA 1 Antwort Letzte Antwort
                0
                • S stan23

                  Hallo,
                  die neuen Möglichkeiten durchdie async-Funktionen hören sich toll an.

                  Nun versuche ich gerade meine alten Callback-Höllen aufzuräumen :)

                  Gibt es einen asynchronen Ersatz für exec oder muss man das mit Promises bauen?

                  function fetchCropPictureMbCam () {
                      return new Promise((resolve) => {
                          cmd = `${wgetCmd} ${picturePathMbCam} ${mailboxCamURL}`;
                          exec(cmd, async function (error, stdout, stderr) {
                              log(`Exec: ${cmd}`);
                              log(`Exec: stdout: ${stdout}, stderr: ${stderr}, error: ${error}`);
                              cmd = `${imageMagickCmd} ${picturePathMbCam} ${imageMagickParams} ${picturePathMbCamCropped}`;
                              exec(cmd, async function (error, stdout, stderr) {
                                  log(`Exec: ${cmd}`);
                                  log(`Exec: stdout: ${stdout}, stderr: ${stderr}, error: ${error}`);
                                  resolve();
                              });
                          });
                      });
                  }
                  
                  
                  subscribe({id: dpMailboxFlap, change: "ne", val: 'open'}, async function(obj) {
                      log('Mailbox: Flap has been opened');
                  
                      setState(dpMailboxFillState, eMailboxFillState.filled, true);
                      /* wait 5 seconds so that letters can be thrown in */
                      await wait(5000);
                      await fetchCropPictureMbCam();
                      sendTo('pushover.0', 'send',  {
                          title: 'Briefkasten',
                          message: "Es wurde Post eingeworfen.",
                          file: picturePathMbCamCropped,
                      });
                  });
                  
                  

                  EDIT:
                  ist das so richtig? das resolve() kommt an die Stelle wenn die Callbacks fertig sind?

                  AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  schrieb am zuletzt editiert von
                  #12

                  @stan23 Für exec gibts tatsächlich keinen Ersatz, weil das Rückgabeobjekt nicht ganz eindeutig wäre.
                  Dein Code ist so fast korrekt:

                  • async vor den functions in fetchCropPictureMbCam ist unnötig, da du darin kein await verwendest
                  • cmd wird nirgends deklariert.

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  S N 2 Antworten Letzte Antwort
                  0
                  • AlCalzoneA AlCalzone

                    @stan23 Für exec gibts tatsächlich keinen Ersatz, weil das Rückgabeobjekt nicht ganz eindeutig wäre.
                    Dein Code ist so fast korrekt:

                    • async vor den functions in fetchCropPictureMbCam ist unnötig, da du darin kein await verwendest
                    • cmd wird nirgends deklariert.
                    S Offline
                    S Offline
                    stan23
                    schrieb am zuletzt editiert von
                    #13

                    @AlCalzone said in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                    Dein Code ist so fast korrekt:

                    • async vor den functions in fetchCropPictureMbCam ist unnötig, da du darin kein await verwendest
                    • cmd wird nirgends deklariert.

                    Stimmt, das Erste ist ein Relikt aus meinen Versuchen, das Zweite war noch global deklariert.
                    Habe ich beides geändert und funktioniert.
                    Vielen Dank!

                    Gibt es denn beim setState auch etwas zu beachten?
                    Ich hatte mir vor langer Zeit mal gemerkt dass man für HomeMatic die Einschaltdauer und den tatsächlichen Schaltbefehl so setzen soll:

                    setState("hm-rpc.2.NEQ0115240.1.ON_TIME", 2*3600, function() {
                        setState("hm-rpc.2.NEQ0115240.1.STATE", true);
                    });
                    

                    Ist das noch okay oder gibt es da auch eine komfortablere Variante? Oder einfach 2 setState hintereinander weil die sich nicht überholen können?

                    Viele Grüße
                    Marco

                    AlCalzoneA 1 Antwort Letzte Antwort
                    0
                    • S stan23

                      @AlCalzone said in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                      Dein Code ist so fast korrekt:

                      • async vor den functions in fetchCropPictureMbCam ist unnötig, da du darin kein await verwendest
                      • cmd wird nirgends deklariert.

                      Stimmt, das Erste ist ein Relikt aus meinen Versuchen, das Zweite war noch global deklariert.
                      Habe ich beides geändert und funktioniert.
                      Vielen Dank!

                      Gibt es denn beim setState auch etwas zu beachten?
                      Ich hatte mir vor langer Zeit mal gemerkt dass man für HomeMatic die Einschaltdauer und den tatsächlichen Schaltbefehl so setzen soll:

                      setState("hm-rpc.2.NEQ0115240.1.ON_TIME", 2*3600, function() {
                          setState("hm-rpc.2.NEQ0115240.1.STATE", true);
                      });
                      

                      Ist das noch okay oder gibt es da auch eine komfortablere Variante? Oder einfach 2 setState hintereinander weil die sich nicht überholen können?

                      AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      schrieb am zuletzt editiert von
                      #14

                      @stan23 sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                      Oder einfach 2 setState hintereinander weil die sich nicht überholen können?

                      Eine "komfortablere" Variante für zwei getrennte States gibt es nicht. Mit await setStateAsync(...) kannst du sie aber einfach unterenander hängen, weil die sich nicht überholen (im Gegensatz zu setState, wo du einen callback brauchst)

                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                      S 1 Antwort Letzte Antwort
                      1
                      • AlCalzoneA AlCalzone

                        @stan23 sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                        Oder einfach 2 setState hintereinander weil die sich nicht überholen können?

                        Eine "komfortablere" Variante für zwei getrennte States gibt es nicht. Mit await setStateAsync(...) kannst du sie aber einfach unterenander hängen, weil die sich nicht überholen (im Gegensatz zu setState, wo du einen callback brauchst)

                        S Offline
                        S Offline
                        stan23
                        schrieb am zuletzt editiert von
                        #15

                        @AlCalzone das finde ich komfortabel genug :)

                        Viele Grüße
                        Marco

                        1 Antwort Letzte Antwort
                        0
                        • AlCalzoneA AlCalzone

                          @stan23 Für exec gibts tatsächlich keinen Ersatz, weil das Rückgabeobjekt nicht ganz eindeutig wäre.
                          Dein Code ist so fast korrekt:

                          • async vor den functions in fetchCropPictureMbCam ist unnötig, da du darin kein await verwendest
                          • cmd wird nirgends deklariert.
                          N Offline
                          N Offline
                          noox
                          schrieb am zuletzt editiert von
                          #16

                          @AlCalzone
                          Gibt es auch eine Lösung für einen async HTTP-Request? Oder soll man es am besten noch ähnlich wie das stan23 für exec gemacht hat lösen?

                          Ich vermute mal, dass die request-Funktion von ioBroker auf das Node-Modul "request" aufbaut? Stimmt das? Das ist scheinbar auch seit Februar "deprecated": https://www.npmjs.com/package/request

                          N AlCalzoneA 2 Antworten Letzte Antwort
                          0
                          • N noox

                            @AlCalzone
                            Gibt es auch eine Lösung für einen async HTTP-Request? Oder soll man es am besten noch ähnlich wie das stan23 für exec gemacht hat lösen?

                            Ich vermute mal, dass die request-Funktion von ioBroker auf das Node-Modul "request" aufbaut? Stimmt das? Das ist scheinbar auch seit Februar "deprecated": https://www.npmjs.com/package/request

                            N Offline
                            N Offline
                            Nahasapee
                            schrieb am zuletzt editiert von
                            #17

                            @noox hi ich hab das thema bei mir so gelöst:

                            https://github.com/Nahasapeemapetilon/MyTelegramMenu/blob/f2effab433a419e7f04967c319dd636f7a08e4cc/lib/googlepolling.js#L91

                            und hier der wait

                            https://github.com/Nahasapeemapetilon/MyTelegramMenu/blob/f2effab433a419e7f04967c319dd636f7a08e4cc/lib/googlepolling.js#L110

                            viele grüße

                            1 Antwort Letzte Antwort
                            1
                            • N noox

                              @AlCalzone
                              Gibt es auch eine Lösung für einen async HTTP-Request? Oder soll man es am besten noch ähnlich wie das stan23 für exec gemacht hat lösen?

                              Ich vermute mal, dass die request-Funktion von ioBroker auf das Node-Modul "request" aufbaut? Stimmt das? Das ist scheinbar auch seit Februar "deprecated": https://www.npmjs.com/package/request

                              AlCalzoneA Offline
                              AlCalzoneA Offline
                              AlCalzone
                              Developer
                              schrieb am zuletzt editiert von
                              #18

                              @noox sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                              Gibt es auch eine Lösung für einen async HTTP-Request?

                              Entweder so wie mein Vorposter.
                              Alternativ ginge z.b. die u.a. von mir bevorzugte Library https://github.com/axios/axios - die Beispiele dort sind mit Promises und .then geschrieben, lassen sich aber selbstverständlich auch mit await nutzen

                              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                              N P 2 Antworten Letzte Antwort
                              1
                              • AlCalzoneA AlCalzone

                                @noox sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                Gibt es auch eine Lösung für einen async HTTP-Request?

                                Entweder so wie mein Vorposter.
                                Alternativ ginge z.b. die u.a. von mir bevorzugte Library https://github.com/axios/axios - die Beispiele dort sind mit Promises und .then geschrieben, lassen sich aber selbstverständlich auch mit await nutzen

                                N Offline
                                N Offline
                                noox
                                schrieb am zuletzt editiert von
                                #19

                                @Nahasapee, @AlCalzone Vielen Dank!
                                Mit Axios geht das echt easy.

                                Erster Versuch für simples Get mit JSON-Response in Typescript:

                                const axios = require('axios').default;
                                
                                class ... { 
                                
                                    public static async httpGetRequestJson(url: string, throwException: boolean = false): Promise<any> {
                                        let response: any;
                                        try {
                                            response = await axios.get(url, {
                                                timeout: 10000,
                                            });
                                        } catch(exception) {
                                            log(`error fetching url ${url}: ${JSON.stringify(exception)}`, 'error');
                                            if(throwException) throw exception;
                                            return undefined;
                                        }
                                        if(response.status != 200) {
                                            log(`error fetching url ${url}. Status: ${response.status} ${response.statusText}. Response: ${JSON.stringify(response)}`, 'error');
                                            if(throwException) throw new Error(`Response status: ${response.status} ${response.statusText}.`);
                                            return undefined;            
                                        }
                                        // log(response.data);
                                        return response.data;
                                    }
                                
                                }
                                

                                Hier wurde das Thema eh auch schon aufgegriffen - hatte es aber erst jetzt (wegen dem Hinweis auf Axios) gefunden: https://forum.iobroker.net/topic/36039/alternative-für-request-paket

                                PS: Wer sich den response komplett ansehen möchte: Bei wir waren da zirkuläre Referencen drinnen, sodass JSON.stringify nicht funktionierte. Auf Stackoverflow gibt's ein paar Diskussionen dazu. Ein Workaround z.B. hier: https://stackoverflow.com/a/48845206

                                1 Antwort Letzte Antwort
                                0
                                • AlCalzoneA AlCalzone

                                  @noox sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                  Gibt es auch eine Lösung für einen async HTTP-Request?

                                  Entweder so wie mein Vorposter.
                                  Alternativ ginge z.b. die u.a. von mir bevorzugte Library https://github.com/axios/axios - die Beispiele dort sind mit Promises und .then geschrieben, lassen sich aber selbstverständlich auch mit await nutzen

                                  P Offline
                                  P Offline
                                  Pittini
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #20

                                  @AlCalzone sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                  @noox sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                  Gibt es auch eine Lösung für einen async HTTP-Request?

                                  Entweder so wie mein Vorposter.
                                  Alternativ ginge z.b. die u.a. von mir bevorzugte Library https://github.com/axios/axios - die Beispiele dort sind mit Promises und .then geschrieben, lassen sich aber selbstverständlich auch mit await nutzen

                                  Ich stell mich leider mal wieder zu doof an, ich hab das Beispiel von Axios versucht umzusetzen, aber da kommt immer nurn leeres Objekt. Hat da evtl jemand nen Beispiel was läuft? Oder kann mir sagen was da verkehrt ist (ich und Objekte werden einfach keine Freunde mehr)?

                                  const axios = require('axios');
                                  
                                  getData();
                                  async function getData() {
                                    try {
                                      const response = await axios.get('https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:air-purifier:0000A007:zhimi-ma4:1',{timeout : 10000});
                                      console.log("resp:"+JSON.stringify( response));
                                    } catch (error) {
                                      console.error(error);
                                    }
                                  }
                                  
                                  N F 2 Antworten Letzte Antwort
                                  0
                                  • P Pittini

                                    @AlCalzone sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                    @noox sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                    Gibt es auch eine Lösung für einen async HTTP-Request?

                                    Entweder so wie mein Vorposter.
                                    Alternativ ginge z.b. die u.a. von mir bevorzugte Library https://github.com/axios/axios - die Beispiele dort sind mit Promises und .then geschrieben, lassen sich aber selbstverständlich auch mit await nutzen

                                    Ich stell mich leider mal wieder zu doof an, ich hab das Beispiel von Axios versucht umzusetzen, aber da kommt immer nurn leeres Objekt. Hat da evtl jemand nen Beispiel was läuft? Oder kann mir sagen was da verkehrt ist (ich und Objekte werden einfach keine Freunde mehr)?

                                    const axios = require('axios');
                                    
                                    getData();
                                    async function getData() {
                                      try {
                                        const response = await axios.get('https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:air-purifier:0000A007:zhimi-ma4:1',{timeout : 10000});
                                        console.log("resp:"+JSON.stringify( response));
                                      } catch (error) {
                                        console.error(error);
                                      }
                                    }
                                    
                                    N Offline
                                    N Offline
                                    noox
                                    schrieb am zuletzt editiert von noox
                                    #21

                                    @Pittini
                                    JSON.stringify funktioniert eventuell nicht auf response, weil hier zirkuläre Referenzen drinnen sind. Siehe meinen Stackoverflow-Link von oben. Aber der Fehler müsste dann im catch() geloggt werden.

                                    Probier mal z.B. nur response.status, response.data, etc.

                                    1 Antwort Letzte Antwort
                                    0
                                    • zaunermaxZ Offline
                                      zaunermaxZ Offline
                                      zaunermax
                                      schrieb am zuletzt editiert von
                                      #22

                                      Mega nice, ich werde gleich alle meine synchronen calls auswechseln. Ich hab sogar vorher einen primitiven Promise wrapper gehabt, aber nativ das ganze zu haben ist sehr geil :raised_hands:

                                      1 Antwort Letzte Antwort
                                      0
                                      • P Pittini

                                        @AlCalzone sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                        @noox sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                        Gibt es auch eine Lösung für einen async HTTP-Request?

                                        Entweder so wie mein Vorposter.
                                        Alternativ ginge z.b. die u.a. von mir bevorzugte Library https://github.com/axios/axios - die Beispiele dort sind mit Promises und .then geschrieben, lassen sich aber selbstverständlich auch mit await nutzen

                                        Ich stell mich leider mal wieder zu doof an, ich hab das Beispiel von Axios versucht umzusetzen, aber da kommt immer nurn leeres Objekt. Hat da evtl jemand nen Beispiel was läuft? Oder kann mir sagen was da verkehrt ist (ich und Objekte werden einfach keine Freunde mehr)?

                                        const axios = require('axios');
                                        
                                        getData();
                                        async function getData() {
                                          try {
                                            const response = await axios.get('https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:air-purifier:0000A007:zhimi-ma4:1',{timeout : 10000});
                                            console.log("resp:"+JSON.stringify( response));
                                          } catch (error) {
                                            console.error(error);
                                          }
                                        }
                                        
                                        F Offline
                                        F Offline
                                        fastfoot
                                        schrieb am zuletzt editiert von
                                        #23

                                        @Pittini sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                        Ich stell mich leider mal wieder zu doof an, ich hab das Beispiel von Axios versucht umzusetzen, aber da kommt immer nurn leeres Objekt. Hat da evtl jemand nen Beispiel was läuft? Oder kann mir sagen was da verkehrt ist (ich und Objekte werden einfach keine Freunde mehr)?

                                        wie schön, wenn man mal nicht der einzige 'Doofe' ist :-) Dein Beispiel läuft bereits perfekt, wenn du JSON.stringify(response.data) nimmst. Das was sonst noch so drin steht findest du mit Object.keys(response) raus, welche du dann alle mit JSON.stringify() untersuchen kannst

                                        iobroker läuft unter Docker auf QNAP TS-451+
                                        SkriptRecovery: https://forum.iobroker.net/post/930558

                                        P 1 Antwort Letzte Antwort
                                        2
                                        • F fastfoot

                                          @Pittini sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                          Ich stell mich leider mal wieder zu doof an, ich hab das Beispiel von Axios versucht umzusetzen, aber da kommt immer nurn leeres Objekt. Hat da evtl jemand nen Beispiel was läuft? Oder kann mir sagen was da verkehrt ist (ich und Objekte werden einfach keine Freunde mehr)?

                                          wie schön, wenn man mal nicht der einzige 'Doofe' ist :-) Dein Beispiel läuft bereits perfekt, wenn du JSON.stringify(response.data) nimmst. Das was sonst noch so drin steht findest du mit Object.keys(response) raus, welche du dann alle mit JSON.stringify() untersuchen kannst

                                          P Offline
                                          P Offline
                                          Pittini
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #24

                                          @fastfoot sagte in [Neu] Diverse async-Funktionen im JavaScript-Adapter:

                                          wie schön, wenn man mal nicht der einzige 'Doofe' ist Dein Beispiel läuft bereits perfekt, wenn du JSON.stringify(response.data) nimmst. Das was sonst noch so drin steht findest du mit Object.keys(response) raus, welche du dann alle mit JSON.stringify() untersuchen kannst

                                          Wow, so einfach. Danke! Ich geh jetzt in die Ecke schämen.

                                          N 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

                                          607

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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