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.5k

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

  • 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.
  • 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 Offline
                            WalW Offline
                            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

                              377

                              Online

                              32.6k

                              Benutzer

                              82.3k

                              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