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. [gelöst] Funktionsrückgabe undefined

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

[gelöst] Funktionsrückgabe undefined

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 538 Aufrufe 2 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.
  • O Offline
    O Offline
    ostseeskipper
    schrieb am zuletzt editiert von ostseeskipper
    #1

    Hallo Zusammen,

    irgendwie verstehe ich wohl nicht wo und wie mit async, await und/oder promises gearbeitet werden muss und hoffe auf hilfe

    Habe folgende Funktion

    function tibberprice_holen(t){
        
        var tibberprice = 0;
        console.log(t);
        
        // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
    
        let search_Std = t.toString().substring(0, 18);
        console.log(search_Std);
        try{  
            id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
               
            if(getState(id).val.substring(0, 18) == search_Std) {
            tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
            console.log(tibberprice);
            return  ;
            }});
        }
        catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
    
    }
    
    console.log('Fertig : ' +tibberprice_holen(new Date()));
    
    

    wenn das Programm läuft zeigt es durch die Logs innerhalb der Funktion den richtigen Wert
    nur ausserhalb im Log kommt undefined:disappointed:

    ? paul53P 2 Antworten Letzte Antwort
    0
    • O ostseeskipper

      Hallo Zusammen,

      irgendwie verstehe ich wohl nicht wo und wie mit async, await und/oder promises gearbeitet werden muss und hoffe auf hilfe

      Habe folgende Funktion

      function tibberprice_holen(t){
          
          var tibberprice = 0;
          console.log(t);
          
          // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
      
          let search_Std = t.toString().substring(0, 18);
          console.log(search_Std);
          try{  
              id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                 
              if(getState(id).val.substring(0, 18) == search_Std) {
              tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
              console.log(tibberprice);
              return  ;
              }});
          }
          catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
      
      }
      
      console.log('Fertig : ' +tibberprice_holen(new Date()));
      
      

      wenn das Programm läuft zeigt es durch die Logs innerhalb der Funktion den richtigen Wert
      nur ausserhalb im Log kommt undefined:disappointed:

      ? Offline
      ? Offline
      Ein ehemaliger Benutzer
      schrieb am zuletzt editiert von Ein ehemaliger Benutzer
      #2

      @ostseeskipper auf den ersten Blick würde ich sagen das du bei return noch angeben musst welchen Wert er denn zurück geben soll. Woher soll er das sonst wissen? Also „return tibberprice“

      Und wenn du eine Funktion mit async deklarierst solltest du innerhalb dieser auch async Funktionen nutzen. Also await getStateAsync(id.replace('startTime', 'Total_Preis')).val; Ist hier nun nicht schlimm und wenn nicht kannst auch das async weg lassen. Aber bei mehreren Werten die man holen möchte macht das dann schon Sinn damit ggf. nicht übersprungen wird.

      O 1 Antwort Letzte Antwort
      0
      • ? Ein ehemaliger Benutzer

        @ostseeskipper auf den ersten Blick würde ich sagen das du bei return noch angeben musst welchen Wert er denn zurück geben soll. Woher soll er das sonst wissen? Also „return tibberprice“

        Und wenn du eine Funktion mit async deklarierst solltest du innerhalb dieser auch async Funktionen nutzen. Also await getStateAsync(id.replace('startTime', 'Total_Preis')).val; Ist hier nun nicht schlimm und wenn nicht kannst auch das async weg lassen. Aber bei mehreren Werten die man holen möchte macht das dann schon Sinn damit ggf. nicht übersprungen wird.

        O Offline
        O Offline
        ostseeskipper
        schrieb am zuletzt editiert von
        #3

        @ciddi89
        Hatte ich bereits probiert genau zu sagen "return tibberprice"
        auch await hilft nicht

        
        function tibberprice_holen(t){          // wenn Funktion geht und wert zurück liefert
            
            var tibberprice = 0;
            console.log(t);
            
            // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
        
            let search_Std = t.toString().substring(0, 18);
            console.log(search_Std);
            try{  
                id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                   
                if(getState(id).val.substring(0, 18) == search_Std) {
                tibberprice = await Math.round(getState(id.replace('startTime', 'Total_Preis')).val*100)/10000;
                console.log(tibberprice);
                return tibberprice ;
                }});
            }
            catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
        
        }
        console.log('Fertig : ' +tibberprice_holen(new Date()));
        
        

        ergibt

        19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:26:37 GMT+0200 (Mitteleuropäische Sommerzeit)
        19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
        19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : undefined
        

        und wenn funktion mit async definiert wird kommt

        19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:27:41 GMT+0200 (Mitteleuropäische Sommerzeit)
        19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
        19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : [object Promise]
        

        Daher wird es irgendwas sein was ich noch nicht verstanden habe und hoffe auf das Wissen hier im Forum

        ? 1 Antwort Letzte Antwort
        0
        • O ostseeskipper

          @ciddi89
          Hatte ich bereits probiert genau zu sagen "return tibberprice"
          auch await hilft nicht

          
          function tibberprice_holen(t){          // wenn Funktion geht und wert zurück liefert
              
              var tibberprice = 0;
              console.log(t);
              
              // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
          
              let search_Std = t.toString().substring(0, 18);
              console.log(search_Std);
              try{  
                  id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                     
                  if(getState(id).val.substring(0, 18) == search_Std) {
                  tibberprice = await Math.round(getState(id.replace('startTime', 'Total_Preis')).val*100)/10000;
                  console.log(tibberprice);
                  return tibberprice ;
                  }});
              }
              catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
          
          }
          console.log('Fertig : ' +tibberprice_holen(new Date()));
          
          

          ergibt

          19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:26:37 GMT+0200 (Mitteleuropäische Sommerzeit)
          19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
          19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : undefined
          

          und wenn funktion mit async definiert wird kommt

          19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:27:41 GMT+0200 (Mitteleuropäische Sommerzeit)
          19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
          19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : [object Promise]
          

          Daher wird es irgendwas sein was ich noch nicht verstanden habe und hoffe auf das Wissen hier im Forum

          ? Offline
          ? Offline
          Ein ehemaliger Benutzer
          schrieb am zuletzt editiert von Ein ehemaliger Benutzer
          #4

          @ostseeskipper erstmal das await for Math.round hat keinen Effekt. Du musst wenn schon await vor das getState setzen. dann heisst es aber await getStateAsync

          Aber woher holt er zb. den Wert? id_SrcTibberpreise Ist da noch mehr im script? Deswegen gibt er wahrscheinlich nichts zurück weil er mit der id nichts anfangen kann und somit aus der Funktion springt.

          Hier aber erstmal wie es mit den await aussehen sollte/könnte:

           
          function tibberprice_holen(t){          // wenn Funktion geht und wert zurück liefert
              
              let tibberprice = 0;
              console.log(t);
              
              // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
           
              let search_Std = t.toString().substring(0, 18);
              console.log(search_Std);
              try{  
                  id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                     
                  if(getState(id).val.substring(0, 18) == search_Std) {
                  tibberprice = Math.round((await getStateAsync(id.replace('startTime','Total_Preis'))).val*100)/10000;
                  console.log(tibberprice);
                  return tibberprice;
                  }});
              }
              catch(error) {
                  console.warn(error.message)
              } // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
           
          }
          const actualTibberprice = tibberprice_holen(new Date());
          console.log('Fertig : ' + actualTibberprice);
          
          

          // EDIT: wird einem auch gesagt wenn du im error fall eine log ausgabe gibt. Hab das Script damit auch noch angepasst.

          19:51:28.618	warn	javascript.0 (539) script.js.Vorlagen.212: id_SrcTibberpreise is not defined
          
          1 Antwort Letzte Antwort
          0
          • O ostseeskipper

            Hallo Zusammen,

            irgendwie verstehe ich wohl nicht wo und wie mit async, await und/oder promises gearbeitet werden muss und hoffe auf hilfe

            Habe folgende Funktion

            function tibberprice_holen(t){
                
                var tibberprice = 0;
                console.log(t);
                
                // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
            
                let search_Std = t.toString().substring(0, 18);
                console.log(search_Std);
                try{  
                    id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                       
                    if(getState(id).val.substring(0, 18) == search_Std) {
                    tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
                    console.log(tibberprice);
                    return  ;
                    }});
                }
                catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
            
            }
            
            console.log('Fertig : ' +tibberprice_holen(new Date()));
            
            

            wenn das Programm läuft zeigt es durch die Logs innerhalb der Funktion den richtigen Wert
            nur ausserhalb im Log kommt undefined:disappointed:

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @ostseeskipper sagte: ausserhalb im Log kommt undefined

            Man muss den Rückgabewert in der äußeren Funktion mitgeben:

            function tibberprice_holen(t){
                var tibberprice = 0;
                console.log(t);
                // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
                let search_Std = t.toString().substring(0, 18);
                console.log(search_Std);
                try {  
                    id_SrcTibberpreise.each(function(id) {  // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                        if(getState(id).val.substring(0, 18) == search_Std) {
                            tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
                            console.log(tibberprice);
                            return;
                        }
                    });
                    return tibberprice;
                }
                catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
            }
             
            console.log('Fertig : ' +tibberprice_holen(new Date()));
            

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

            O 1 Antwort Letzte Antwort
            1
            • paul53P paul53

              @ostseeskipper sagte: ausserhalb im Log kommt undefined

              Man muss den Rückgabewert in der äußeren Funktion mitgeben:

              function tibberprice_holen(t){
                  var tibberprice = 0;
                  console.log(t);
                  // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
                  let search_Std = t.toString().substring(0, 18);
                  console.log(search_Std);
                  try {  
                      id_SrcTibberpreise.each(function(id) {  // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                          if(getState(id).val.substring(0, 18) == search_Std) {
                              tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
                              console.log(tibberprice);
                              return;
                          }
                      });
                      return tibberprice;
                  }
                  catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
              }
               
              console.log('Fertig : ' +tibberprice_holen(new Date()));
              
              O Offline
              O Offline
              ostseeskipper
              schrieb am zuletzt editiert von
              #6

              @paul53 wie immer besten Dank:+1:
              echt klasse wie du hier mit deinem Wissen hilfst und unterstützt.
              Hast du ne Kaffeekasse?:tea:

              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

              659

              Online

              32.6k

              Benutzer

              82.0k

              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