Skip to content

Fix delayed timers#2

Open
lieblb wants to merge 10000 commits intobheyser:trunkfrom
lieblb:fix-delayed-timers
Open

Fix delayed timers#2
lieblb wants to merge 10000 commits intobheyser:trunkfrom
lieblb:fix-delayed-timers

Conversation

@lieblb
Copy link
Copy Markdown

@lieblb lieblb commented Jan 10, 2019

Folgende Änderung zur Umschiffung der START_TIMERS_DELAY-Konstante:
e9c6498

In TestILIAS kam es beim Test von Zuordnungsfragen immer wieder zum Effekt, dass zum Zeitpunkt des Auslesens die Frage noch nicht initialisiert war (d.h. startTimers lief, obwohl die Frage eben noch nicht fertig initialisiert war).

Die vorliegende Änderung entfernt START_TIMERS_DELAY und basiert auf einem anderen Ansatz, der in TestILIAS sehr robust (unter Chrome wie auch Firefox) läuft.

Die Idee ist, dass man nicht nur einen Hook auf ready macht, sondern im Hook nochmals eine Registrierung für den ready-Hook, was einen dann ans Ende der Queue von allen ready-Handlern schiebt; die Annahme, dass man ans Ende dieser Queue kommt, ist natürlich leider undokumentiertes Verhalten, funktioniert aber offenbar in allen Browsern genau so.

$(document).ready(function() {
   // Nach uns laufen mglw. noch andere ready-Handler. Deswegen registrieren
   // wir uns nochmal neu.
   $(document).ready(function() {
       // Zu diesem Zeitpunkt sind alle anderen ready-Handler gelaufen.
       log("DELAYED initializer is called.");
   });
});

Hier ist ein kleines Demo-JS, das den Ansatz isoliert zeigt:

late-js.zip

Manuell lässt sich damit zeigen, dass der Ansatz z.B. mit folgenden Engines funktioniert:

Chrome 71.0.3578.98
Firefox 63.0
Safari 12.0.2

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.