05.03.2025 06:58 | |
Beigetreten: 21.01.2013 Letzter Bes: 29.08.2025 Beiträge: 4087 Bewertung:
|
Hallo TJ_Aichelin, damit die Lösung funktioniert, darf die Methode "ChangeScreenAsync" erst dann ein erfülltes Promise zurückgeben, wenn alle Elemente des geladenen Bildes verfügbar sind. Geschieht dies früher, schlägt der Ansatz fehl. Aus der Dokumentation geht nicht hervor, wann genau das Promise als erfüllt gilt. Der von Murof vorgeschlagene Ansatz, dies über das OnLoaded-Event des Bildes zu machen, wäre nicht so elegant, würde aber meiner Meinung nach funktionieren. Dass die Trace-Methode aus dem Catch-Block nicht ausgeführt wird, könnte daran liegen, dass das Skript - soweit ich es verstanden habe - im Kontext eines zu entfernenden Bildes ausgeführt wird. Beim Bildwechsel wird dann von der Scripting Engine aufgeräumt. Viele Grüße |
05.03.2025 08:28 | |
Beigetreten: 04.04.2023 Letzter Bes: 16.08.2025 Beiträge: 9 Bewertung:
|
Hallo Stefan, laut dem Beispielcode in der von dir verlinkten Hilfe wird das Promise erst resolved wenn der Bildaufbau abgeschlossen ist. Ich hab den Beispielcode aus der Hilfe auch nochmal testweise genau so implementiert. Der .catch()-Block dient bei einem Promise eine negative Rückmeldung (reject) der asynchronen Funktion entgegen zu nehmen. Das ist ein Teil von Javascript selbst & hat nichts mit einem zu entfernenden Bild zu tun. Die Bildfenster über einzelne Scripte an dem "Aufgebaut"-Ereignis zu laden funktioniert nur eingeschränkt zuverlässig. Im Forum habe ich auch nochmal einen anderen Tread mit identischer Problemstellung gefunden. Ich hab heute Morgen folgenden Code
nochmal etwas aufgebohrt.
Der erste Bildwechsel von swContent wird ausgeführt, danach passiert nichts mehr. Packe ich jetzt vor das erste ChangeScreenAsync() noch ein await (also ein "warte hier bis diese Funktion fertig ist") kommt der Trace("Ende des Scripts") NICHT.
|
05.03.2025 10:58 | |
Beigetreten: 21.01.2013 Letzter Bes: 29.08.2025 Beiträge: 4087 Bewertung:
|
Hallo TJ_Aichelin, vielen Dank für Deine Erklärung, wie ein Promise funktioniert. Du hast natürlich Recht, die Methode "ChangeScreenAsync" sollte das Promise nur dann als erfüllt melden, wenn die Bildelemente verfügbar sind. Und ich kann Dich beruhigen, das Verhalten ist auch so. Nun zum eigentlichen Problem. Vielleicht hast Du schon bemerkt, wenn Du den Debugger benutzt, dass die Skripte in verschiedenen Modulen laufen. Für jedes Bild bzw. jeden Faceplate Container gibt es ein Modul für Ereignisse und ein Modul für die Dynamisierung. Wenn nun ein Skript einen Bildwechsel für das eigene Bildfenster auslöst, wird das Skript abgebrochen und aus dem Speicher entfernt. Daher sollte der Bildwechsel immer das letzte Ereignis sein. Damit kann auch ein Promise nicht mehr erfüllt werden. Dies ist vergleichbar mit dem Schließen eines Browser-Tabs, der noch Daten nachlädt. Die Daten kommen dann nirgendwo mehr an bzw. das Laden wird auch abgebrochen. Viele Grüße |
Folgen Sie uns auf