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. Verarbeiten von Promises - mit Fetch und API Adapter

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    982

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Verarbeiten von Promises - mit Fetch und API Adapter

Geplant Angeheftet Gesperrt Verschoben JavaScript
19 Beiträge 6 Kommentatoren 2.0k Aufrufe 5 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.
  • S SMARTY.ML

    @fastfoot
    Die direkte Antwort:

    { "val": 21.97, "ack": true, "ts": 1625742939234, "q": 0, "from": "system.adapter.admin.0", "user": "system.user.admin", "lc": 1640217238396, "common": { "name": "Power_aktuell", "role": "value.power", "type": "number", "unit": "W", "read": true, "write": true, "alias": { "id": "shelly.0.SHSW-PM#F4CFA2E502F5#1.Relay0.Power" }, "custom": { "sql.0": { "enabled": true, "changesOnly": false, "debounce": "1000", "retention": "2678400", "changesRelogInterval": "600", "changesMinDelta": 1, "storageType": "", "aliasId": "", "counter": false } } }, "native": {}, "acl": { "object": 1636, "owner": "system.user", "ownerGroup": "system.group", "state": 1636 }, "_id": "alias.0.Klimaanlage.Power_aktuell.ACTUAL", "type": "state" }
    

    Im Log:

    Response { type: "cors", url: "http://IP/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, body: ReadableStream, bodyUsed: false }
    (...)
    
    F Offline
    F Offline
    fastfoot
    schrieb am zuletzt editiert von
    #5

    @smarty-ml und jetzt das out parsen und dann kannst du easy zugreifen auf was du willst:

    let o=JSON.parse(out);
    let val =o.val;
    log(val);
    

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

    S 1 Antwort Letzte Antwort
    0
    • F fastfoot

      @smarty-ml und jetzt das out parsen und dann kannst du easy zugreifen auf was du willst:

      let o=JSON.parse(out);
      let val =o.val;
      log(val);
      
      S Offline
      S Offline
      SMARTY.ML
      schrieb am zuletzt editiert von SMARTY.ML
      #6

      @fastfoot leider nein:

      Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
      

      Nachfolgendes mit dem Response aus dem Browser funktioniert:

      i = JSON.parse('{ "val": 21.86, "ack": true, "ts": 1625742939234, "q": 0, "from": "system.adapter.admin.0", "user": "system.user.admin", "lc": 1640242659631, "common": { "name": "Power_aktuell", "role": "value.power", "type": "number", "unit": "W", "read": true, "write": true, "alias": { "id": "shelly.0.SHSW-PM#F4CFA2E502F5#1.Relay0.Power" }, "custom": { "sql.0": { "enabled": true, "changesOnly": false, "debounce": "1000", "retention": "2678400", "changesRelogInterval": "600", "changesMinDelta": 1, "storageType": "", "aliasId": "", "counter": false } } }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "alias.0.Klimaanlage.Power_aktuell.ACTUAL", "type": "state" }');
      
      console.log(i.val);
      
      1 Antwort Letzte Antwort
      0
      • S SMARTY.ML

        @fastfoot
        Die direkte Antwort:

        { "val": 21.97, "ack": true, "ts": 1625742939234, "q": 0, "from": "system.adapter.admin.0", "user": "system.user.admin", "lc": 1640217238396, "common": { "name": "Power_aktuell", "role": "value.power", "type": "number", "unit": "W", "read": true, "write": true, "alias": { "id": "shelly.0.SHSW-PM#F4CFA2E502F5#1.Relay0.Power" }, "custom": { "sql.0": { "enabled": true, "changesOnly": false, "debounce": "1000", "retention": "2678400", "changesRelogInterval": "600", "changesMinDelta": 1, "storageType": "", "aliasId": "", "counter": false } } }, "native": {}, "acl": { "object": 1636, "owner": "system.user", "ownerGroup": "system.group", "state": 1636 }, "_id": "alias.0.Klimaanlage.Power_aktuell.ACTUAL", "type": "state" }
        

        Im Log:

        Response { type: "cors", url: "http://IP/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, body: ReadableStream, bodyUsed: false }
        (...)
        
        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von
        #7

        @smarty-ml Poste doch mal bitte exakt das was im Log steht wenn du die beiden Zeilen von @fastfoot ausführen lässt.

        Dein Post zeigt 2 Code-Schnipsel, beide sind nicht so wie sie im Log dargestellt sind - daher fehlen Informationen.

        A.

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        S 1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @smarty-ml Poste doch mal bitte exakt das was im Log steht wenn du die beiden Zeilen von @fastfoot ausführen lässt.

          Dein Post zeigt 2 Code-Schnipsel, beide sind nicht so wie sie im Log dargestellt sind - daher fehlen Informationen.

          A.

          S Offline
          S Offline
          SMARTY.ML
          schrieb am zuletzt editiert von
          #8
          var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint');
          let o=JSON.parse(out);
          let val =o.val;
          log(val);
          Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
              <anonymous> debugger eval code:7
              async* debugger eval code:10
          
          
          AsgothianA F 2 Antworten Letzte Antwort
          0
          • S SMARTY.ML
            var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint');
            let o=JSON.parse(out);
            let val =o.val;
            log(val);
            Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
                <anonymous> debugger eval code:7
                async* debugger eval code:10
            
            
            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von
            #9

            @smarty-ml Ich meinte die Ausgaben von diesem Code:

            @fastfoot sagte in Verarbeiten von Promises - mit Fetch und API Adapter:

            @smarty-ml was liefert?

            var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint';
            log(out);
            

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            S 1 Antwort Letzte Antwort
            0
            • AsgothianA Asgothian

              @smarty-ml Ich meinte die Ausgaben von diesem Code:

              @fastfoot sagte in Verarbeiten von Promises - mit Fetch und API Adapter:

              @smarty-ml was liefert?

              var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint';
              log(out);
              
              S Offline
              S Offline
              SMARTY.ML
              schrieb am zuletzt editiert von SMARTY.ML
              #10

              Nächste Versuch

              1.PNG

              10:23:19.227 var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint');
              console.log(out);
              10:23:19.256
              Response { type: "cors", url: "http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, body: ReadableStream, bodyUsed: false }
              ​
              body: ReadableStream { locked: false }
              ​​
              locked: false
              ​​
              <prototype>: ReadableStream.prototype { cancel: cancel(), getReader: getReader(), tee: tee(), … }
              ​
              bodyUsed: false
              ​
              headers: Headers {  }
              ​​
              <prototype>: HeadersPrototype { append: append(), delete: delete(), get: get(), … }
              ​
              ok: true
              ​
              redirected: false
              ​
              status: 200
              ​
              statusText: "OK"
              ​
              type: "cors"
              ​
              url: "http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint"
              ​
              <prototype>: ResponsePrototype { clone: clone(), arrayBuffer: arrayBuffer(), blob: blob(), … }
              ​​
              arrayBuffer: function arrayBuffer()
              ​​
              blob: function blob()
              ​​
              body: 
              ​​
              bodyUsed: 
              ​​
              clone: function clone()
              ​​
              constructor: function ()
              ​​
              formData: function formData()
              ​​
              headers: 
              ​​
              json: function json()
              ​​
              ok: 
              ​​
              redirected: 
              ​​
              status: 
              ​​
              statusText: 
              ​​
              text: function text()
              ​​
              type: 
              ​​
              url: 
              ​​
              Symbol(Symbol.toStringTag): "Response"
              ​​
              <get body()>: function body()
              ​​
              <get bodyUsed()>: function bodyUsed()
              ​​
              <get headers()>: function headers()
              ​​
              <get ok()>: function ok()
              ​​
              <get redirected()>: function redirected()
              ​​
              <get status()>: function status()
              ​​
              <get statusText()>: function statusText()
              ​​
              <get type()>: function type()
              ​​
              <get url()>: function url()
              ​​
              <prototype>: Object { … }
              
              S 1 Antwort Letzte Antwort
              0
              • S SMARTY.ML

                Nächste Versuch

                1.PNG

                10:23:19.227 var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint');
                console.log(out);
                10:23:19.256
                Response { type: "cors", url: "http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, body: ReadableStream, bodyUsed: false }
                ​
                body: ReadableStream { locked: false }
                ​​
                locked: false
                ​​
                <prototype>: ReadableStream.prototype { cancel: cancel(), getReader: getReader(), tee: tee(), … }
                ​
                bodyUsed: false
                ​
                headers: Headers {  }
                ​​
                <prototype>: HeadersPrototype { append: append(), delete: delete(), get: get(), … }
                ​
                ok: true
                ​
                redirected: false
                ​
                status: 200
                ​
                statusText: "OK"
                ​
                type: "cors"
                ​
                url: "http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint"
                ​
                <prototype>: ResponsePrototype { clone: clone(), arrayBuffer: arrayBuffer(), blob: blob(), … }
                ​​
                arrayBuffer: function arrayBuffer()
                ​​
                blob: function blob()
                ​​
                body: 
                ​​
                bodyUsed: 
                ​​
                clone: function clone()
                ​​
                constructor: function ()
                ​​
                formData: function formData()
                ​​
                headers: 
                ​​
                json: function json()
                ​​
                ok: 
                ​​
                redirected: 
                ​​
                status: 
                ​​
                statusText: 
                ​​
                text: function text()
                ​​
                type: 
                ​​
                url: 
                ​​
                Symbol(Symbol.toStringTag): "Response"
                ​​
                <get body()>: function body()
                ​​
                <get bodyUsed()>: function bodyUsed()
                ​​
                <get headers()>: function headers()
                ​​
                <get ok()>: function ok()
                ​​
                <get redirected()>: function redirected()
                ​​
                <get status()>: function status()
                ​​
                <get statusText()>: function statusText()
                ​​
                <get type()>: function type()
                ​​
                <get url()>: function url()
                ​​
                <prototype>: Object { … }
                
                S Offline
                S Offline
                SMARTY.ML
                schrieb am zuletzt editiert von SMARTY.ML
                #11
                async function getjson(url = '', data = {}) {
                        const response = await fetch(url, {
                        });
                        return response.json();
                    }
                    
                
                async function get_api_value(ip,id)
                {
                  let o;
                  await getjson('http://' + ip + '/get/' + id + '?prettyPrint')
                    .then(data => 
                          {
                          o = data;
                          });
                  return o.val;
                }
                

                Meine Lösung: Ich deklariere eine weitere Variable, welche ich im .then(...) mit den Daten Fülle und gebe diese im return aus. Im Unterschied zu vorher muss ich nicht mit dem Promise weiter arbeiten. Innerhalb von .then(...) kann ich nämlich auf das Response als Object/JSON zugreifen, so wie oben beschrieben.

                Ich glaube ich habe damit eine Lösung, aber schlaut mich bitte mal auf.

                AlCalzoneA 1 Antwort Letzte Antwort
                0
                • S SMARTY.ML
                  async function getjson(url = '', data = {}) {
                          const response = await fetch(url, {
                          });
                          return response.json();
                      }
                      
                  
                  async function get_api_value(ip,id)
                  {
                    let o;
                    await getjson('http://' + ip + '/get/' + id + '?prettyPrint')
                      .then(data => 
                            {
                            o = data;
                            });
                    return o.val;
                  }
                  

                  Meine Lösung: Ich deklariere eine weitere Variable, welche ich im .then(...) mit den Daten Fülle und gebe diese im return aus. Im Unterschied zu vorher muss ich nicht mit dem Promise weiter arbeiten. Innerhalb von .then(...) kann ich nämlich auf das Response als Object/JSON zugreifen, so wie oben beschrieben.

                  Ich glaube ich habe damit eine Lösung, aber schlaut mich bitte mal auf.

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

                  @smarty-ml sagte in Verarbeiten von Promises - mit Fetch und API Adapter:

                  Ich glaube ich habe damit eine Lösung, aber schlaut mich bitte mal auf.

                  await und .then zusammen macht in 99,99% der Fälle keinen Sinn.

                  let o;
                  await getjson(...).then(data => {
                    o = data;
                  });
                  

                  ist äquivalent zu

                  let o = await getjson(...);
                  

                  Und um deine beiden Funktionen in eins zu packen, reicht das:

                  async function get_api_value(ip,id) {
                    // 1. HTTP request machen
                    const response = await fetch('http://' + ip + '/get/' + id + '?prettyPrint');
                    // 2. Antwort umwandeln
                    return response.json().val;
                  }
                  

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

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    SMARTY.ML
                    schrieb am zuletzt editiert von SMARTY.ML
                    #13

                    OKAY, danke ich habe es!
                    Der Fehler lag also in meinen Gedankengängen beim .then und await.
                    Ich schlaue mich da mal auf ^^

                    Zum Verständnis:

                    Await und .then erzwingen eine Pause, bis die entsprechende Funktion beendet ist. Lasse ich in der finalen Funktion das await weg, so führt er beide Befehle zum gleichen Zeitpunkt durch und findet daher kein Objekt "response"?

                    Richtig?

                    AlCalzoneA 1 Antwort Letzte Antwort
                    0
                    • S SMARTY.ML

                      OKAY, danke ich habe es!
                      Der Fehler lag also in meinen Gedankengängen beim .then und await.
                      Ich schlaue mich da mal auf ^^

                      Zum Verständnis:

                      Await und .then erzwingen eine Pause, bis die entsprechende Funktion beendet ist. Lasse ich in der finalen Funktion das await weg, so führt er beide Befehle zum gleichen Zeitpunkt durch und findet daher kein Objekt "response"?

                      Richtig?

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

                      @smarty-ml Eine async-Funktion gibt implizit einen Promise (ein Wert, der erst später "fertig" ist) zurück. Wenn du diesen nicht mit await abwartest, geht's wie du schon erkannt hast sofort weiter, ohne dass das Ergebnis schon da ist.

                      await nutzt übrigens unter der Haube auch .then, macht den Ablauf des Codes aber klarer.

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

                      1 Antwort Letzte Antwort
                      1
                      • S SMARTY.ML
                        var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint');
                        let o=JSON.parse(out);
                        let val =o.val;
                        log(val);
                        Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
                            <anonymous> debugger eval code:7
                            async* debugger eval code:10
                        
                        
                        F Offline
                        F Offline
                        fastfoot
                        schrieb am zuletzt editiert von
                        #15

                        @smarty-ml sagte in Verarbeiten von Promises - mit Fetch und API Adapter:

                        var out = await fetch('http://192.168.31.3:8087/get/alias.0.Klimaanlage.Power_aktuell.ACTUAL?prettyPrint');
                        let o=JSON.parse(out);
                        let val =o.val;
                        log(val);
                        Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
                            <anonymous> debugger eval code:7
                            async* debugger eval code:10
                        
                        

                        dein out ist bereits ein Objekt. Lasse Zeile 2 Weg und in Zeile 3 let val=out.val

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

                        1 Antwort Letzte Antwort
                        0
                        • Karel PuhliK Offline
                          Karel PuhliK Offline
                          Karel Puhli
                          schrieb am zuletzt editiert von
                          #16

                          Nabend!
                          Das Thema ist etwas älter, aber vielleicht antwortet ja trotzdem jemand.... :-)
                          Ich möchte eine einfache fetch api Anfrage durchführen. Leider bekomme ich eine Fehlermeldung.
                          Hat jemand ne Idee?

                          Hier mein Code:

                          import fetch from 'node-fetch'; 
                          
                          async function getWetter() {
                              const data = await fetch("https://api.weather.gov/gridpoints/OKX/35,35/forecast");
                              const ergebnis = data.json();
                              console.log(ergebnis);
                          }
                          
                          getWetter();
                          

                          Hier die Fehlermeldung:

                          18:57:36.521	info	javascript.0 (202) Start javascript script.js.Javascript.ioBroker.Test.fetch
                          18:57:36.541	error	javascript.0 (202) script.js.Javascript.ioBroker.Test.fetch compile failed: at script.js.Javascript.ioBroker.Test.fetch:1
                          18:57:45.066	info	javascript.0 (202) Stop script script.js.Javascript.ioBroker.Test.fetch
                          

                          Hier die Ausgabe von npm ls node-fetch:

                          root@iobroker:/opt/iobroker# npm ls node-fetch
                          iobroker.inst@3.0.0 /opt/iobroker
                          ├─┬ iobroker.backitup@2.6.16
                          │ └─┬ google-auth-library@8.7.0
                          │   └─┬ gaxios@5.0.2
                          │     └── node-fetch@2.6.9
                          ├─┬ iobroker.iot@1.14.2
                          │ └─┬ canvas@2.11.0
                          │   └─┬ @mapbox/node-pre-gyp@1.0.10
                          │     └── node-fetch@2.6.9 deduped
                          └─┬ iobroker.javascript@6.1.4
                            └── node-fetch@3.3.1
                          
                          root@iobroker:/opt/iobroker# 
                          

                          Schönen Abend und Grüße!!!

                          Karel

                          1 Antwort Letzte Antwort
                          0
                          • Karel PuhliK Offline
                            Karel PuhliK Offline
                            Karel Puhli
                            schrieb am zuletzt editiert von
                            #17

                            Keiner ne Idee???

                            WalW 1 Antwort Letzte Antwort
                            0
                            • Karel PuhliK Karel Puhli

                              Keiner ne Idee???

                              WalW Online
                              WalW Online
                              Wal
                              Developer
                              schrieb am zuletzt editiert von
                              #18

                              @karel-puhli ,
                              ich denke das du das Modul fetch hier hinzufügen musst, ist aber ohne Gewähr.
                              Screenshot 2023-04-25 192439.png

                              Gruß
                              Walter

                              DoorIO-Adapter
                              wioBrowser-Adapter und wioBrowser

                              Karel PuhliK 1 Antwort Letzte Antwort
                              0
                              • WalW Wal

                                @karel-puhli ,
                                ich denke das du das Modul fetch hier hinzufügen musst, ist aber ohne Gewähr.
                                Screenshot 2023-04-25 192439.png

                                Karel PuhliK Offline
                                Karel PuhliK Offline
                                Karel Puhli
                                schrieb am zuletzt editiert von Karel Puhli
                                #19

                                @wal

                                Hi Walter!
                                Danke für Deine Antwort!
                                Ist in beiden Zeilen drin!

                                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

                                741

                                Online

                                32.6k

                                Benutzer

                                82.2k

                                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