Ich habe Verhalten von einer Web-Anwendung, die ich nicht klären kann: das Hinzufügen von Warnmeldungen zum Debuggen "löst" das Problem, da der Fehler nicht auftritt. Die relevanten Teile der Geschichte sind wie folgt:Wie kann das Debugging mit Alarm (nicht definiertes) Timing-Problem lösen?
Ich habe eine init-Methode, eine Funktion, die Inhalt und eine "Haupt" -Funktion, etwas wie (beachte, dass a ist eine globale Variable, Teil eines Namespace) PS: Es stellt sich heraus, dass in meinem minimalen Beispieläquivalent ein wesentlicher Teil fehlte, der das Problem verursacht hat.
Bei Ausführung wie oben: Alarm 1 wird angezeigt, dann Alarm 2, dann Inhalt eines Get angezeigt. Wenn ohne die Benachrichtigung ausgeführt wird der folgende Fehler ausgelöst wird, brechen die App:
TypeError: a is undefined
Alle Funktionen nach dem Dokument bereit Ereignis aufgerufen werden, wird gefeuert, soweit ich das beurteilen kann, und die Alarmlinien wurden hinzugefügt, um zu prüfen, richtige Reihenfolge der Ausführung.
Frage ist dann, wie das Hinzufügen der Alarmzeilen das Initialisierungsproblem lösen kann? dann: wie kann man es ohne sie lösen?
'neues A' wird ein' A' mit seinem _prototype_ initialisieren, aber 'show' ist im Konstruktor definiert und daher nicht vererbt. Ist es behoben, wenn Sie 'A.prototype.show = function() {...}' verwenden? Und Warnungen sollten und _will_ keinen Unterschied bei der Codeausführung machen, also schauen Sie in andere Richtungen nach Fehlern. – somethinghere
Während es wichtig ist, ein reduziertes Beispiel zu erstellen, ist Ihr Code ungültig und nicht sinnvoll. Offensichtlich läuft das nicht, weil du sagst, es funktioniert mit dem 'alert()'. Veröffentlichen Sie eine tatsächliche Darstellung des Problems. –
Wenn eine Warnung Ihren Code verändert, kann ich nur daran denken, wenn Sie etwas asynchrones tun, wie das Laden einer lokalen Datei oder das Mischen von Bibliotheken wie eckig und jquery, so dass Sie Timing-Unterschiede erhalten. Mir ist das gleiche passiert wie mir, aber normalerweise stellt sich heraus, dass es sich bei der Warnmeldung um einen Ablenkungsmanöver handelt, und das Problem liegt in der Reihenfolge der Ereignisse. – Toby