NEWS
Fehler: Keine Subscription/Schedule nach Funktionsaufruf
-
Ich bin im Beta-Zweig unterwegs, dementsprechend ist mein JavaScript-Adapter auf Version v8.1.1
Folgendes Blockly (Beispiel):
Müsste ja beim Ausführen eine Subscription generieren:
2024-05-06 14:20:01.165 - info: javascript.0 (3659915) Start JavaScript script.js.Tests.Forum_TestFunktion (Blockly) 2024-05-06 14:20:01.182 - warn: javascript.0 (3659915) script.js.Tests.Forum_TestFunktion: Wollen wir ein Spiel spielen? 2024-05-06 14:20:01.182 - info: javascript.0 (3659915) script.js.Tests.Forum_TestFunktion: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
Wenn ich das umdrehe geht alles wieder:
2024-05-06 14:21:00.390 - info: javascript.0 (3659915) Start JavaScript script.js.Tests.Forum_TestFunktion (Blockly) 2024-05-06 14:21:00.393 - warn: javascript.0 (3659915) script.js.Tests.Forum_TestFunktion: Wollen wir ein Spiel spielen? 2024-05-06 14:21:00.393 - info: javascript.0 (3659915) script.js.Tests.Forum_TestFunktion: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
Das habe leider in ganze vielen meiner Skripte - da baue ich erst die Datenpunkte (gerne mit einer eigenen Funktion) und befülle diese einmal beim Start (auch gerne per Funktion)
Immer wenn ich einen Funktion vor Triggern oder Zeitplänen aufrufe werden diese nicht aktiviert. Es betrifft keine bestehenden Skripte, aber sobald ich die einmal anfasse muss ich die Reihenfolge umdrehen.Das war früher, sprich in älteren Versionen, noch nicht so, ich kann aber nicht mehr sagen wann das passiert ist.
Ist das ein Bug oder mache ich etwas falsch?Ich stubbse mal @haus-automatisierung dazu mit an weil ich meine er zuletzt kräftig dran geschraubt hat.
-
@bananajoe sagte: Immer wenn ich einen Funktion vor Triggern oder Zeitplänen aufrufe werden diese nicht aktiviert.
Das kann ich mit Version 8.0.3 nicht bestätigen: Der Trigger wird ausgeführt, obwohl im Log beim Skriptstart "registered 0 subscriptions," gemeldet werden.
@bananajoe sagte in Fehler: Keine Subscription/Schedule nach Funktionsaufruf:
Ist das ein Bug oder mache ich etwas falsch?
Es ist ein Bug, der die Log-Ausgabe bei Skriptstart betrifft (Blockly).
EDIT: Es tritt nur im Zusammenhang mit await vor dem Funktionsaufruf auf.
-
du rufst doch keine der funktionen auf (du definierst sie nur), beim script start - wieso soll es dann subscriben ?
im gegesatz zum 2ten beispiel - dort wird der trigger gesetzt
-
@liv-in-sky schau dir das noch mal genau an, ich rufe die Funktion einmal auf bevor ich den Trigger starte
-
@bananajoe oh sorry - mein fehler
-
@paul53 sagte in Fehler: Keine Subscription/Schedule nach Funktionsaufruf:
Es ist ein Bug, der die Log-Ausgabe bei Skriptstart betrifft (Blockly).
Recht hast du, es wird trotzdem ausgeführt, puhh
-
@bananajoe sagte in Fehler: Keine Subscription/Schedule nach Funktionsaufruf:
Recht hast du, es wird trotzdem ausgeführt, puhh
Ich kann hier nicht so richtig folgen. Das heißt, das alles funktioniert, aber eine Log-Meldung fehlt?
-
@haus-automatisierung sagte: alles funktioniert, aber eine Log-Meldung fehlt?
Es funktioniert, aber bei Skriptstart wird eine falsche (zu geringe) Anzahl an Subscriptions und Schedules im Log ausgegeben.
-
@paul53 Das Problem ist wahrscheinlich, dass die Subscription erst nach der Ausgabe registriert wird. Es wird ja dieser Code zusammengebaut:
(async () => { // globalScripts // script })(); log( 'registered ' + __engine.__subscriptions + ' subscription' + (__engine.__subscriptions === 1 ? '' : 's' ) + ',' + __engine.__schedules + ' schedule' + (__engine.__schedules === 1 ? '' : 's' ) + ',' + __engine.__subscriptionsMessage + ' message' + (__engine.__subscriptionsMessage === 1 ? '' : 's' ) + ',' + __engine.__subscriptionsLog + ' log' + (__engine.__subscriptionsLog === 1 ? '' : 's' ) + ' and ' + __engine.__subscriptionsFile + ' file subscription' + (__engine.__subscriptionsFile === 1 ? '' : 's' ) );
Dadurch kann es passieren, dass das
log()
vor dem Inhalt in der asynchronen Funktion ausgeführt wird. Das war dann aber schon immer so - daran wurde ewig nichts geändert. Ich gucke mal dass ich das auf.then()
ändere, damit das Log immer erst später ausgegeben wird. -
@bananajoe sagte in Fehler: Keine Subscription/Schedule nach Funktionsaufruf:
Ich stubbse mal @haus-automatisierung dazu mit an weil ich meine er zuletzt kräftig dran geschraubt hat.
Okay, hier ein Fix für das oben genannte Problem: https://github.com/ioBroker/ioBroker.javascript/commit/3a87abff627e341875333f122015423152abf4ad
Aber: Die Logmeldung ist generell nur ein einmaliger "Zwischenstand" beim Start. Solltest Du einen Timeout drumherum packen, ist die Logmeldung wieder "falsch", weil ja zum Zeitpunkt des Logs die Subscription noch nicht angelegt wurde. z.B.
Hier wird der Trigger ja eine Sekunde nach der Logmeldung angelegt. Funktioniert alles - nur die Logmeldung sagt dann logischerweise auch "0 subscriptions".