Tutorial: _runDemo komplett ueberarbeitet mit dreifacher Absicherung
_runDemo hat jetzt drei Sicherheitsnetze: 1. .then() - Wenn Demo-Promise resolved aber _demoRunning noch true: Navigation wird trotzdem freigegeben 2. .catch() - Bei Fehler: Navigation wird sofort freigegeben 3. Fallback-Timeout (30s) - Falls Demo komplett haengt: Automatische Freigabe nach 30 Sekunden done()-Funktion ist idempotent (kann mehrfach aufgerufen werden). Handles auch den Fall dass fn.call() kein Promise zurueckgibt. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -764,7 +764,7 @@
|
||||
<script src="/static/js/api_network.js?v=20260316a"></script>
|
||||
<script src="/static/js/network-graph.js?v=20260316a"></script>
|
||||
<script src="/static/js/app_network.js?v=20260316a"></script>
|
||||
<script src="/static/js/tutorial.js?v=20260316s"></script>
|
||||
<script src="/static/js/tutorial.js?v=20260316t"></script>
|
||||
<script src="/static/js/chat.js?v=20260316f"></script>
|
||||
<script>document.addEventListener("DOMContentLoaded",function(){Chat.init();Tutorial.init()});</script>
|
||||
|
||||
|
||||
@@ -496,12 +496,37 @@ const Tutorial = {
|
||||
// Sichere Demo-Ausfuehrung: Faengt Fehler ab und stellt Navigation sicher
|
||||
_runDemo(fn) {
|
||||
var self = this;
|
||||
fn.call(this).catch(function(e) {
|
||||
var finished = false;
|
||||
function done() {
|
||||
if (finished) return;
|
||||
finished = true;
|
||||
self._hideCursor();
|
||||
self._clearSubHighlights();
|
||||
self._demoRunning = false;
|
||||
self._enableNavAfterDemo();
|
||||
}
|
||||
// Fallback-Timeout: Nach 30s wird Demo auf jeden Fall beendet
|
||||
var fallback = setTimeout(done, 30000);
|
||||
try {
|
||||
var result = fn.call(this);
|
||||
if (result && typeof result.then === 'function') {
|
||||
result.then(function() {
|
||||
clearTimeout(fallback);
|
||||
// Demo-Methode hat _enableNavAfterDemo selbst aufgerufen,
|
||||
// aber falls nicht, machen wir es hier
|
||||
if (self._demoRunning) done();
|
||||
}).catch(function(e) {
|
||||
clearTimeout(fallback);
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
// Synchron beendet
|
||||
clearTimeout(fallback);
|
||||
if (self._demoRunning) done();
|
||||
}
|
||||
} catch(e) {
|
||||
clearTimeout(fallback);
|
||||
done();
|
||||
}
|
||||
},
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren