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. Rückgabewert von async Function festlegen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Rückgabewert von async Function festlegen

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 4 Kommentatoren 385 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.
  • W Offline
    W Offline
    WolfgangFB
    schrieb am zuletzt editiert von
    #1

    Vorweg: Ich stehe mit Promises und Async noch etwas auf Kriegsfuß, verzeiht bitte Anfängerfehler.

    Ich habe folgende Funktion:

    async function CreateIfNotExistsStringAsync(Datenpunkt="", InitValue="", Klarname=""){
        if (Datenpunkt.search("javascript.0.Verbrauch.") != 0){
            Datenpunkt = "javascript.0.Verbrauch." + Datenpunkt;
        }
        return new Promise(async (resolve,reject)=>{
            if (!existsState(Datenpunkt)){
                await createStateAsync(Datenpunkt, InitValue, {type: "string",name: Klarname, read: true,write: true,role: "value", unit: ""});
            }
            return resolve(Datenpunkt);
        });
     }
    
    

    mein Ziel ist es, mit

    const VerbraucherDP = await CreateIfNotExistsStringAsync("Stromverbrauch.Verbraucher", "", "Letzte Verbraucher Datei");
    

    VerbraucherDP den Wert "javascript.0.Verbrauch.Stromverbrauch.Verbraucher" zuzuweisen. Das funktioniert auch.

    wenn ich aber

    setState(VerbraucherDP, "Hallo");
    

    schreibe funktioniert das zwar auch, aber im Quelltext ist "VerbrauherDP" unterkringelt und als Hinweis kommt "No overload matches this call.", wenn ich mit der Maus über VerbraucherDP gehe kommt: "const VerbraucherDP: unknown".
    Ich hätte jetzt eigentlich erwartet, dass durch die Funktionsdeklaration

    async function CreateIfNotExistsStringAsync(Datenpunkt="", InitValue="", Klarname=""){
    

    der Rückgabewert als String festgelgt ist - ist er aber scheinbar nicht. Wie lege ich den Rückgabewert als String fest? Ein toString() im return Teil tut auch nicht.

    CodierknechtC AcguaA 2 Antworten Letzte Antwort
    0
    • W WolfgangFB

      Vorweg: Ich stehe mit Promises und Async noch etwas auf Kriegsfuß, verzeiht bitte Anfängerfehler.

      Ich habe folgende Funktion:

      async function CreateIfNotExistsStringAsync(Datenpunkt="", InitValue="", Klarname=""){
          if (Datenpunkt.search("javascript.0.Verbrauch.") != 0){
              Datenpunkt = "javascript.0.Verbrauch." + Datenpunkt;
          }
          return new Promise(async (resolve,reject)=>{
              if (!existsState(Datenpunkt)){
                  await createStateAsync(Datenpunkt, InitValue, {type: "string",name: Klarname, read: true,write: true,role: "value", unit: ""});
              }
              return resolve(Datenpunkt);
          });
       }
      
      

      mein Ziel ist es, mit

      const VerbraucherDP = await CreateIfNotExistsStringAsync("Stromverbrauch.Verbraucher", "", "Letzte Verbraucher Datei");
      

      VerbraucherDP den Wert "javascript.0.Verbrauch.Stromverbrauch.Verbraucher" zuzuweisen. Das funktioniert auch.

      wenn ich aber

      setState(VerbraucherDP, "Hallo");
      

      schreibe funktioniert das zwar auch, aber im Quelltext ist "VerbrauherDP" unterkringelt und als Hinweis kommt "No overload matches this call.", wenn ich mit der Maus über VerbraucherDP gehe kommt: "const VerbraucherDP: unknown".
      Ich hätte jetzt eigentlich erwartet, dass durch die Funktionsdeklaration

      async function CreateIfNotExistsStringAsync(Datenpunkt="", InitValue="", Klarname=""){
      

      der Rückgabewert als String festgelgt ist - ist er aber scheinbar nicht. Wie lege ich den Rückgabewert als String fest? Ein toString() im return Teil tut auch nicht.

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @wolfgangfb sagte in Rückgabewert von async Function festlegen:

      Wie lege ich den Rückgabewert als String fest?

      In einer nicht typisierten Sprache?

      @wolfgangfb sagte in Rückgabewert von async Function festlegen:

      Ein toString() im return Teil tut auch nicht.

      Würde ich - nach meinem Verständnis - allerdings erwarten.

      Ich lese dann mal interessiert mit ...

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      1 Antwort Letzte Antwort
      0
      • W WolfgangFB

        Vorweg: Ich stehe mit Promises und Async noch etwas auf Kriegsfuß, verzeiht bitte Anfängerfehler.

        Ich habe folgende Funktion:

        async function CreateIfNotExistsStringAsync(Datenpunkt="", InitValue="", Klarname=""){
            if (Datenpunkt.search("javascript.0.Verbrauch.") != 0){
                Datenpunkt = "javascript.0.Verbrauch." + Datenpunkt;
            }
            return new Promise(async (resolve,reject)=>{
                if (!existsState(Datenpunkt)){
                    await createStateAsync(Datenpunkt, InitValue, {type: "string",name: Klarname, read: true,write: true,role: "value", unit: ""});
                }
                return resolve(Datenpunkt);
            });
         }
        
        

        mein Ziel ist es, mit

        const VerbraucherDP = await CreateIfNotExistsStringAsync("Stromverbrauch.Verbraucher", "", "Letzte Verbraucher Datei");
        

        VerbraucherDP den Wert "javascript.0.Verbrauch.Stromverbrauch.Verbraucher" zuzuweisen. Das funktioniert auch.

        wenn ich aber

        setState(VerbraucherDP, "Hallo");
        

        schreibe funktioniert das zwar auch, aber im Quelltext ist "VerbrauherDP" unterkringelt und als Hinweis kommt "No overload matches this call.", wenn ich mit der Maus über VerbraucherDP gehe kommt: "const VerbraucherDP: unknown".
        Ich hätte jetzt eigentlich erwartet, dass durch die Funktionsdeklaration

        async function CreateIfNotExistsStringAsync(Datenpunkt="", InitValue="", Klarname=""){
        

        der Rückgabewert als String festgelgt ist - ist er aber scheinbar nicht. Wie lege ich den Rückgabewert als String fest? Ein toString() im return Teil tut auch nicht.

        AcguaA Offline
        AcguaA Offline
        Acgua
        schrieb am zuletzt editiert von
        #3

        @wolfgangfb said in Rückgabewert von async Function festlegen:

        Ich habe folgende Funktion:

        Promise brauchst du da nicht. ioBroker bietet ja bereits diverse async-Funktionen.
        Folgende abgewandelte Funktion gibt den Datenpunkt als String zurück, oder bei Fehler ein leeres String.

        async function CreateIfNotExistsStringAsync2(Datenpunkt="", InitValue="", Klarname=""){
            try {
                if (! Datenpunkt.startsWith("javascript.0.Verbrauch.")){
                        Datenpunkt = "javascript.0.Verbrauch." + Datenpunkt;
                }
        
                if (! (await existsStateAsync(Datenpunkt))){
                    await createStateAsync(Datenpunkt, InitValue, {type: "string", name: Klarname, read: true, write: true, role: "value"});
                }
                return Datenpunkt;
        
        
            } catch (error) {
                log(error.stack, 'error');
                return '';
            }
        }
        

        Wobei createStateAsync() einen Parameter forceCreation mitbringt, den auf false gesetzt, dann kann man sich die vorherige Abfrage mit existsState sparen. https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#createstate

        Übrigens:
        Typen kannst du schöner in TypeScript definieren, erste Zeile in TypeScrypt wäre:

        async function CreateIfNotExistsStringAsync2(Datenpunkt: string, InitValue: string, Klarname: string): Promise<string> {
        

        Das Promise<string> sagt hierbei aus, dass als Rückgabewert ein String erwartet wird.

        Dies nur in kürze, sag gerne Bescheid, wenn du detaillierte Hilfestellungen oder Infos brauchst.

        W 1 Antwort Letzte Antwort
        0
        • AcguaA Acgua

          @wolfgangfb said in Rückgabewert von async Function festlegen:

          Ich habe folgende Funktion:

          Promise brauchst du da nicht. ioBroker bietet ja bereits diverse async-Funktionen.
          Folgende abgewandelte Funktion gibt den Datenpunkt als String zurück, oder bei Fehler ein leeres String.

          async function CreateIfNotExistsStringAsync2(Datenpunkt="", InitValue="", Klarname=""){
              try {
                  if (! Datenpunkt.startsWith("javascript.0.Verbrauch.")){
                          Datenpunkt = "javascript.0.Verbrauch." + Datenpunkt;
                  }
          
                  if (! (await existsStateAsync(Datenpunkt))){
                      await createStateAsync(Datenpunkt, InitValue, {type: "string", name: Klarname, read: true, write: true, role: "value"});
                  }
                  return Datenpunkt;
          
          
              } catch (error) {
                  log(error.stack, 'error');
                  return '';
              }
          }
          

          Wobei createStateAsync() einen Parameter forceCreation mitbringt, den auf false gesetzt, dann kann man sich die vorherige Abfrage mit existsState sparen. https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#createstate

          Übrigens:
          Typen kannst du schöner in TypeScript definieren, erste Zeile in TypeScrypt wäre:

          async function CreateIfNotExistsStringAsync2(Datenpunkt: string, InitValue: string, Klarname: string): Promise<string> {
          

          Das Promise<string> sagt hierbei aus, dass als Rückgabewert ein String erwartet wird.

          Dies nur in kürze, sag gerne Bescheid, wenn du detaillierte Hilfestellungen oder Infos brauchst.

          W Offline
          W Offline
          WolfgangFB
          schrieb am zuletzt editiert von
          #4

          @acgua sagte in Rückgabewert von async Function festlegen:

          @wolfgangfb said in Rückgabewert von async Function festlegen:

          Ich habe folgende Funktion:

          Promise brauchst du da nicht. ioBroker bietet ja bereits diverse async-Funktionen.
          Folgende abgewandelte Funktion gibt den Datenpunkt als String zurück, oder bei Fehler ein leeres String.

          Danke erstmal, schaue ich mir später richtig an.
          Mich würde aber doch interessieren (ich will ja lernen :-), wie ich es in meinem Konstrukt mache, dass der Rückgabetyp richtig gesetzt ist.

          AcguaA F 2 Antworten Letzte Antwort
          0
          • W WolfgangFB

            @acgua sagte in Rückgabewert von async Function festlegen:

            @wolfgangfb said in Rückgabewert von async Function festlegen:

            Ich habe folgende Funktion:

            Promise brauchst du da nicht. ioBroker bietet ja bereits diverse async-Funktionen.
            Folgende abgewandelte Funktion gibt den Datenpunkt als String zurück, oder bei Fehler ein leeres String.

            Danke erstmal, schaue ich mir später richtig an.
            Mich würde aber doch interessieren (ich will ja lernen :-), wie ich es in meinem Konstrukt mache, dass der Rückgabetyp richtig gesetzt ist.

            AcguaA Offline
            AcguaA Offline
            Acgua
            schrieb am zuletzt editiert von
            #5

            @wolfgangfb said in Rückgabewert von async Function festlegen:

            Mich würde aber doch interessieren (ich will ja lernen :-), wie ich es in meinem Konstrukt mache, dass der Rückgabetyp richtig gesetzt ist.

            Hast du soweit schon richtig gemacht, also im resolve() das String zurückgeben.

            @wolfgangfb said in Rückgabewert von async Function festlegen:

            aber im Quelltext ist "VerbrauherDP" unterkringelt und als Hinweis kommt "No overload matches this call."

            Bei mir ist nichts unterkringelt, liegt wohl am JS-Adapter (Version, Browsercache, etc.) und in wie fern der Editor tatsächlich immer alles korrekt erkennt.

            Was noch auffällt: existsState() ist nicht async, daher in meinem Beispiel durch existsStateAsync() ersetzt.

            1 Antwort Letzte Antwort
            0
            • W WolfgangFB

              @acgua sagte in Rückgabewert von async Function festlegen:

              @wolfgangfb said in Rückgabewert von async Function festlegen:

              Ich habe folgende Funktion:

              Promise brauchst du da nicht. ioBroker bietet ja bereits diverse async-Funktionen.
              Folgende abgewandelte Funktion gibt den Datenpunkt als String zurück, oder bei Fehler ein leeres String.

              Danke erstmal, schaue ich mir später richtig an.
              Mich würde aber doch interessieren (ich will ja lernen :-), wie ich es in meinem Konstrukt mache, dass der Rückgabetyp richtig gesetzt ist.

              F Offline
              F Offline
              fastfoot
              schrieb am zuletzt editiert von fastfoot
              #6

              @wolfgangfb sagte in Rückgabewert von async Function festlegen:

              dass der Rückgabetyp richtig gesetzt ist.

              Die Kringel im Editor sagen nicht aus ob etwas richtig oder falsch ist, sie geben 'nur' einen Hinweis dass etwas falsch sein könnte. Dazu werden xxxxx.d.ts Dateien genutzt in welchen die Funktionen in TypeScript Notation definiert werden. Für den JS-Adapter ist das die javascript.d.ts Datei. Dort ist der Parameter für die setState() Funktion als string definiert. Für Deine Funktion ist jedoch nicht bekannt welchen Typ sie zurückgibt, somit ist dem Editor nicht bekannt dass ein String übergeben wird und er kringelt dann halt

              Um die Kringel zu unterbinden (nicht empfohlen bzw. nur wenn man weiss was man tut)

              • Ganz zu Beginn deines Skripts // @ts-nocheck eingeben. Dadurch werden die Hinweise für die gesamte Datei abgeschaltet.
              • Unmittelbar über einer Zeile mit Kringeln // @ts-ignore eingeben. Dadurch wird der Hinweis für die nächste Zeile verhindert.

              xxxxx.d.ts Dateien funktionieren im JS-Adapter m.W. nach nicht. Man kann Funktionen und auch Variablen mit JSDoc ausstatten, dann funktionieren die Hinweise genauso und man könnte auch eine Doku davon erstellen(Google JSDoc)

              /** 
               * Funktion zur Ermittlung und Erstellung eines Datenpunkts
               * 
               * @param {string} Datenpunkt der Datenpunkt
               * @param {string} InitValue Initialwert
               * @param {string} Klarname der Name des DP
               * @returns {Promise<string>} gibt ein Promise zurück
              */
              async function CreateIfNotExistsStringAsync(Datenpunkt, InitValue, Klarname) {
              

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

              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

              677

              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