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. Entwicklung
  4. Frage zu await function - Zuweisung in Variable

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Frage zu await function - Zuweisung in Variable

Geplant Angeheftet Gesperrt Verschoben Entwicklung
5 Beiträge 3 Kommentatoren 305 Aufrufe 3 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.
  • SKBS Offline
    SKBS Offline
    SKB
    Developer Most Active
    schrieb am zuletzt editiert von SKB
    #1

    Hallo,
    ich entwickel gerade einen Adapter.

    Aktuell verstehe ich:

    // Load all Data once before subscribing
    valuesObj = await this.getInitialValues(configObj);
    

    nicht so ganz.

    Denn eine direkte Ausgabe danach mit:

    this.log.debug("Objekt: " + JSON.stringify(valuesObj));
    

    liefert nichts.

    Erst, wenn ich diese Log-Ausgabe an das Ende der onReady Funktion setze, erscheint etwas. Daraus schließe ich, das hier nicht gewartet wird, bis die Funktion ausgeführt wurde.

    Eigentlich müsste die umschließende onReady Funktion doch genau an der Stelle stehenbleiben und warten, bis die getInitialValues Funktion die Daten in das valuesObj geschrieben hat, oder?

    Die Funktion sieht wie folgt aus:

    async getInitialValues(obj) {
    	let tmpObj = {};
    	Object.entries(obj).forEach(entry => {
    		const [key, value] = entry;
    		this.getForeignState(value, (err, stateValue) => {
    			if (!key.includes("percent")) {
    				tmpObj[key] = recalculate ? this.recalculateValue(stateValue.val) : stateValue.val;
    			} else {
    				tmpObj[key] = stateValue.val;
    			}
    		});
    	});
    	return tmpObj;
    }
    

    Ich denke, ich habe einfach nur einen Denkfehler :D

    ... wer nicht mit der Zeit geht, geht mit der Zeit ...

    Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

    AsgothianA 1 Antwort Letzte Antwort
    0
    • SKBS SKB

      Hallo,
      ich entwickel gerade einen Adapter.

      Aktuell verstehe ich:

      // Load all Data once before subscribing
      valuesObj = await this.getInitialValues(configObj);
      

      nicht so ganz.

      Denn eine direkte Ausgabe danach mit:

      this.log.debug("Objekt: " + JSON.stringify(valuesObj));
      

      liefert nichts.

      Erst, wenn ich diese Log-Ausgabe an das Ende der onReady Funktion setze, erscheint etwas. Daraus schließe ich, das hier nicht gewartet wird, bis die Funktion ausgeführt wurde.

      Eigentlich müsste die umschließende onReady Funktion doch genau an der Stelle stehenbleiben und warten, bis die getInitialValues Funktion die Daten in das valuesObj geschrieben hat, oder?

      Die Funktion sieht wie folgt aus:

      async getInitialValues(obj) {
      	let tmpObj = {};
      	Object.entries(obj).forEach(entry => {
      		const [key, value] = entry;
      		this.getForeignState(value, (err, stateValue) => {
      			if (!key.includes("percent")) {
      				tmpObj[key] = recalculate ? this.recalculateValue(stateValue.val) : stateValue.val;
      			} else {
      				tmpObj[key] = stateValue.val;
      			}
      		});
      	});
      	return tmpObj;
      }
      

      Ich denke, ich habe einfach nur einen Denkfehler :D

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

      @skb der

      Fehler ist das du async/await mit callback mischt ohne promises zu benutzen.

      das forEach in Zeile 3 deines Skriptes fragt alle Objekte per getForeignState an, wartet aber nicht darauf das die antworten angekommen sind. Deswegen ist wenn die Funktion zurück kommt das Objekt tmpObj nicht gefüllt.

      A.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      SKBS 1 Antwort Letzte Antwort
      0
      • AsgothianA Asgothian

        @skb der

        Fehler ist das du async/await mit callback mischt ohne promises zu benutzen.

        das forEach in Zeile 3 deines Skriptes fragt alle Objekte per getForeignState an, wartet aber nicht darauf das die antworten angekommen sind. Deswegen ist wenn die Funktion zurück kommt das Objekt tmpObj nicht gefüllt.

        A.

        SKBS Offline
        SKBS Offline
        SKB
        Developer Most Active
        schrieb am zuletzt editiert von
        #3

        @asgothian Danke für den Hinweis.

        Wäre es dir möglich, ein kurzes Beispiel einzustellen, damit ich mir dies visuell besser vorstellen kann?

        Vielen Dank!

        ... wer nicht mit der Zeit geht, geht mit der Zeit ...

        Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

        AsgothianA haus-automatisierungH 2 Antworten Letzte Antwort
        0
        • SKBS SKB

          @asgothian Danke für den Hinweis.

          Wäre es dir möglich, ein kurzes Beispiel einzustellen, damit ich mir dies visuell besser vorstellen kann?

          Vielen Dank!

          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von
          #4

          @skb nein, leider nicht. Allerdings sollte es die Funktion getForeignState auch als async variable geben, so das du an Stelle des callback auch folgendes Konstrukt machen kannst:

          
          const stateval = await getForeignStarte(value);
          if (stateval) { if !key.includes("percent")) {
              ....
          }
          
          

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          1 Antwort Letzte Antwort
          0
          • SKBS SKB

            @asgothian Danke für den Hinweis.

            Wäre es dir möglich, ein kurzes Beispiel einzustellen, damit ich mir dies visuell besser vorstellen kann?

            Vielen Dank!

            haus-automatisierungH Online
            haus-automatisierungH Online
            haus-automatisierung
            Developer Most Active
            schrieb am zuletzt editiert von haus-automatisierung
            #5

            @skb

            Du musst warten, bis Du das Ergebnis hast. Ansonsten wird tmpObj zurückgegeben, obwohl noch gar nicht alle Eigenschaften abgearbeitet wurden.

            So z.B.

            async getInitialValues(obj) {
            	let tmpObj = {};
            	for (var key of Object.keys(obj)) {
            		const value = obj[key];
            		const stateValue = await this.getForeignStateAsync(value);
            		if (!key.includes("percent")) {
            			tmpObj[key] = recalculate ? this.recalculateValue(stateValue.val) : stateValue.val;
            		} else {
            			tmpObj[key] = stateValue.val;
            		}
            	}
            	return tmpObj;
            }
            

            🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
            🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
            📚 Meine inoffizielle ioBroker Dokumentation

            1 Antwort Letzte Antwort
            1
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            746

            Online

            32.5k

            Benutzer

            81.7k

            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