Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Frage zu await function - Zuweisung in Variable

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Frage zu await function - Zuweisung in Variable

    This topic has been deleted. Only users with topic management privileges can see it.
    • SKB
      SKB Developer Most Active last edited by 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 😄

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @SKB last edited by

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

        SKB 1 Reply Last reply Reply Quote 0
        • SKB
          SKB Developer Most Active @Asgothian last edited by

          @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!

          Asgothian haus-automatisierung 2 Replies Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @SKB last edited by

            @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")) {
                ....
            }
            
            
            1 Reply Last reply Reply Quote 0
            • haus-automatisierung
              haus-automatisierung Developer Most Active @SKB last edited by haus-automatisierung

              @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;
              }
              
              1 Reply Last reply Reply Quote 1
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              802
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              3
              5
              271
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo