NEWS
Neue Datenpunkte ersten beim zweiten Skriptstart verfügbar?
-
Hallo,
kenn jemand den Effekt, dass Datenpunkte im Skript zwar mit create State angelegt werden, aber erst beim zweiten Skriptstart verfügbar sind?
Beispiel: Beim ersten Skriptstart wird die Schleife 10 mal durchlaufen, respektive endlos.
Beim zweiten Start gar nicht.
Es spielt keine Rolle, ob man auf getObject oder getState().netExist abfrägt.
Wo ist mein Fehler?
-JJ
console.error("Start: "); const dp_Alive = "javascript.1.Alive.0x-Test"; // Javascript 1; für Instanz 0 entsprechend ändern. Datenpunkt nach zweitem Skriptstart manull löschen. for (i = 1; i < 10; i++) { if (!getObject(dp_Alive)) { console.warn("Loop: " + i); createState(dp_Alive, true); console.warn(getState(dp_Alive).val); } } console.error("Ende."); stopScript(); -
Funktionen, die eine Callback-Funktion enthalten können wie z.B. createState(), setState() usw., werden nur angeschubst, deren vollständige Ausführung aber nicht abgewartet. Wenn man das Ergebnis dieser Funktionen auswerten will, muss man das in der Callback-Funktion machen.
console.error("Start: "); const dp_Alive = "Alive.0x-Test"; // Datenpunkt nach zweitem Skriptstart manull löschen. const id_Alive = "javascript.1." + dp_Alive; if (!getObject(id_Alive)) { createState(dp_Alive, true, function() { console.warn(getState(dp_Alive).val); }); } console.error("Ende.");Das Error-Log "Ende." wird vor dem Warning-Log mit dem Wert kommen
-
Vielen Dank für die schnelle und kompetente Antwort.
Wie "warte" ich an dieser Stelle am elegantesten darauf, dass die Datenpunkte beschrieben oder gelesen werden können, um Fehler durch verfrühte getState oder setState zu umgehen?
Die Datenpunkte werden als Trigger zum Start weiterer Aktionen verwendet. Wenn ich 12 Datenpunkte brauche, muss ich dann einen 13. anlegen, mit FALSE initieren, warten bis der Callback kommt und dann mit TRUE eine Subscription auslösen oder gibt es noch was eleganteres?
-
@JJJ:Die Datenpunkte werden als Trigger zum Start weiterer Aktionen verwendet `
Jeden Datenpunkt auf change: 'any' triggern, was die default Einstellung bei dem on-Muster als Objekt ist. Dann wird sofort nach Erstellen des Datenpunktes das erste Mal getriggert.on({id: id_Alive}, function(dp) { // Triggert bei jeder Aktualisierung des Zeitstempels hier das Datenpunkt-Objekt (dp) auswerten });Ein Triggern erfolgt immer erst dann, wenn der Trigger-Datenpunkt verfügbar ist (auch für getState() und setState()).
-
Funktionen, die eine Callback-Funktion enthalten können wie z.B. createState(), setState() usw., werden nur angeschubst, deren vollständige Ausführung aber nicht abgewartet. Wenn man das Ergebnis dieser Funktionen auswerten will, muss man das in der Callback-Funktion machen.
console.error("Start: "); const dp_Alive = "Alive.0x-Test"; // Datenpunkt nach zweitem Skriptstart manull löschen. const id_Alive = "javascript.1." + dp_Alive; if (!getObject(id_Alive)) { createState(dp_Alive, true, function() { console.warn(getState(dp_Alive).val); }); } console.error("Ende.");Das Error-Log "Ende." wird vor dem Warning-Log mit dem Wert kommen `
Man muss gar nicht prüfen ob die variable existiert. CreateState macht das auch.
-
@JJJ:Und wenn mehrere Datenpunkte anzulegen sind? `
Vorschlag:const dp1 = '...'; ... const dpN = '...'; const anzahlDP = N; // für N die tatsächliche Datenpunkt-Anzahl einsetzen var cnt = 0; function auswertung() { cnt++; if(cnt == anzahlDP) { // Hier erfolgt die Auswertung } } createState(dp1, true, auswertung); ... createState(dpN, true, auswertung);
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden