NEWS
js callback asynchron problem
-
Eventuell sind die neuen async-Funktionen in 4.8.x was für dich @hanss
https://forum.iobroker.net/topic/36999/neu-diverse-async-funktionen-im-javascript-adapterDamit lässt sich der Programmablauf trotz asynchronität schön steuern. Ich hab den obigen Schnipsel mal entsprechend umgebaut. Beachte das
async
vor der Funktion undawait setStateAsync
:async function raumzaehler() { var Raumctr = 0; // Schleife für jeden Raum ###################################### for (let i = 0; i < S_Raum.length; i++) { const element = S_Raum[i]; if (SollTemp_akt != Temp_FOA && SollTemp_akt != Temp_Abw) { await setStateAsync(Out_Root + D_Raum[index] + ".Man", SollTemp_akt, true); setRT(index, element, SollTemp_akt); // function setRT wg. Callback log("RaumzählerCB: " + Raumctr + " Index: " + RaumIndex); } else { setRT(index, element, SollTemp_akt); log("Raumzähler: " + Raumctr + " Index: " + RaumIndex); } } // Schleife für jeden Raum ###################################### // ########## Script soll hier fortfahren, wenn Schleife für jeden Raum durchlaufen ist. ########## log("Raumzähler nach allen Räumen: " + Raumctr + " Index: " + RaumIndex); } // Funktion aufrufen nicht vergessen! raumzaehler();
-
ich habe immer wieder probleme mit dem async und await - toll wäre es, wenn man so was wie mit dem type-script kurs für adapterentwickler machen würde - nur halt für dieses thema
-
-
@AlCalzone danke werd ich mal durcharbeiten
-
@liv-in-sky sagte in js callback asynchron problem:
....wenn man so was wie mit dem type-script kurs für adapterentwickler machen würde....
gibt es dazu einen Link?
-
-
@liv-in-sky cool, Danke!
-
Async und await machen aus asynchronen Funktionen wieder synchrone Funktionen.
Das will er ja nicht -
Hier mal ein kurzer Artikel, der auf einen Punkt eingeht, der die Funktionsweise der asynchronen Funktionen (callback oder auch promise basiert) erklärt
https://dev.to/steelvoltage/if-javascript-is-single-threaded-how-is-it-asynchronous-56gd
-
@OliverIO
Vielen Dank, ich habe das jetzt so gelöst:In die Funktion setRT() einen Raumzähler und das Script eingefügt, wenn alle Räume durchlaufen sind:
Das ist sehr übersichtlich und nicht so kompliziert wie async und await.
Ich glaube, das kapier ich nicht mehr.setRT() { Raumctr++ //mein Script if (S_Raum.length == Raumctr){ // letzter Raum // Script hier, wenn alle Räume durchlaufen sind Raumctr=0 } }
-
@OliverIO wieso nicht? Wenn man etwas ausführen will, nachdem asynchrone Vorgänge durch sind, ist async/await genau das richtige Mittel.
Und IMO intuitiver als der callback Krempel. Nach dem Aufruf mit await ist es einfach fertig. -
@AlCalzone
Ah hatte einer seiner Antworten falsch interpretiert. Hab nochmal gelesen.
Wenn er mit seiner Lösung nun zufrieden ist, ist ja alles gut