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
    971

  • 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
    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

                        362

                        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