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

                          780

                          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