Nach einem seltsamen Verhalten unserer Anwendung (mit Strophe XMPP und jquery) haben wir festgestellt, dass die jquery-Ereignisschleife synchron ist und keine Ausnahme abfängt.Warum Jquery-Ereignisschleife bei Ausnahme unterbrochen wird
Es bedeutet, dass, wenn der erste Ereignishandler eine Ausnahme auslöst, der zweite nie aufgerufen wird.
Wir erwarteten zwei Ausgaben, aber die zweite: "Listener onBar" wurde nie angezeigt.
Siehe JQuery-Code, in der "Trigger" -Funktion gibt es kein Try/Catch-Muster während der Schleife der Handler.
while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
event.type = i > 1 ?
bubbleType :
special.bindType || type;
// jQuery handler
handle = (jQuery._data(cur, "events") || {})[ event.type ] && jQuery._data(cur, "handle");
if (handle) {
handle.apply(cur, data);
}
... (line 4998 in JQuery 1.10.2)
Wir waren von dieser Implementierung überrascht. In reinem Javascript werden alle Handler aufgerufen, selbst wenn einer von ihnen abgestürzt ist: http://jsfiddle.net/bamthomas/kgS7A/2/.
Weiß jemand, warum das JQuery-Team die Ausführung des nächsten Handlers nicht erlaubt, selbst wenn der vorherige abgestürzt ist? Warum werden Ausnahmen nicht eingefangen?
Warum haben sie Javascript Event-Handler nicht verwendet?
"Warum fängt jQuery keine Ausnahmen?" Wahrscheinlich liegt das daran, dass niemand dachte, dass dies ein Problem sein könnte. Sie können gerne eine Pull-Anfrage an ihr Github-Repository senden. –
Wenn Ihr Event-Handler auslösen kann, liegt es in Ihrer Verantwortung, die Ausnahme zu erfassen. Warum würdest du erwarten (oder wollen), dass 'Trigger' das tut? – Tomalak
So viel wie die Entdeckung, dass jQuery Ausnahmen nicht abfangen kann nützlich sein, ich glaube nicht, dass diese Frage objektiv beantwortet werden kann ... –