NEWS
Direkt nach createState setState aufrufen
-
Guten Abend,
ich möchte in einem Script die DPs, falls nicht vorhanden, anlegen und dann befüllen.devices.forEach(function(device, index, arr){ createState(device.idVis, 0, false, StateDefault); initStates(device); //hier passieren einige Checks und in späteren Funktionsaufrufen das setState... });
Beim ersten Aufruf (ohne erstellten State) bekomme ich ein paar Warnings (außer, ich stelle forceCreation auf true).
Eine Möglichkeit wäre ja die initStates als callback anzugeben, aber das verringert mmn. die Lesbarkeit.Woran liegt das? Ist zum Zeitpunkt von setState der aktualisierte Objektbaum noch nicht bekannt? Lässt sich das Aktualisieren erzwingen?
Oder gibt es eine andere Möglichkeit? [Timeout (1000ms) habe ich bereits erfolglos probiert...]
-
@manuxi sagte in Direkt nach createState setState aufrufen:
Guten Abend,
ich möchte in einem Script die DPs, falls nicht vorhanden, anlegen und dann befüllen.
Beim ersten Aufruf (ohne erstellten State) bekomme ich ein paar Warnings (außer, ich stelle forceCreation auf true).
Eine Möglichkeit wäre ja die initStates als callback anzugeben, aber das verringert mmn. die Lesbarkeit.Woran liegt das? Ist zum Zeitpunkt von setState der aktualisierte Objektbaum noch nicht bekannt? Lässt sich das Aktualisieren erzwingen?
Oder gibt es eine andere Möglichkeit? [Timeout (1000ms) habe ich bereits erfolglos probiert...]
async function main() { //hier kopierst du dein ganzes Skript rein for ( const device of devices) { try { await createStateAsync(device.idVis, 0, false, StateDefault); initStates(device); //hier passieren einige Checks und in späteren Funktionsaufrufen das setState... } catch(e) { // Fehler müssen abgefangen werden weil sonst der Nodejs Prozess neustartet. } }); } main()
Das ist die einfachste Version - du kopierst dein Skript komplett in die Funktion und kannst dann await benutzen.
foreach würde ich dann aber nicht benutzen, weil das nötige async die funktionen in der Schleife ab dem await asychron laufen lassen würde.
-
@ticaki vielen Dank für die Info! Werd ich morgen testen!
-
@ticaki Funktioniert! Vielen Dank!