In jQuery $ .Deferred enthaltene Probleme (jQuery 1.x / 2.x)

@Domenic hat einen sehr gründlichen Artikel über die Schwächen von jQuery deferred-Objekte: Sie sind fehlt den Punkt der Verspricht. In es Domenic highlights ein paar Schwächen jQuery verspricht im Vergleich zu anderen, darunter Qwhen.js, RSVP.js und ES6 promises.

Gehe ich Weg von Domenic Artikel das Gefühl, dass jQuery verspricht eine inhärente scheitern, konzeptionell. Ich versuchte Beispiele zu dem Konzept.

Entnehme ich, es gibt zwei Probleme mit dem jQuery-Implementierung:

1. Die .then Methode ist nicht verkettbare

In anderen Worten

promise.then(a).then(b)

jQuery rufen a dann b wenn die promise erfüllt ist.

Seit .then gibt ein neues Versprechen in die andere Versprechen Bibliotheken, deren äquivalent wäre:

promise.then(a)
promise.then(b)

2. Die Ausnahmebehandlung ist sprudelte in jQuery.

Dem anderen Problem zu sein scheint, Ausnahmebehandlung, nämlich:

try {
  promise.then(a)
} catch (e) {
}

Den Gegenwert in Q wäre:

try {
  promise.then(a).done()
} catch (e) {
   //.done() re-throws any exceptions from a
}

In jQuery die Ausnahme und wirft Blasen, wenn a scheitert an den catch-block. In den anderen verspricht jede Ausnahme in a wäre, durchgeführt durch die .done oder .catch oder anderen asynchronen fangen. Wenn keines der Versprechen API-Aufrufe abfangen der Ausnahme, dass es verschwindet (daher der Q best-practice-z.B. mit .done zu release werden alle nicht behandelten Ausnahmen).

 

Tun, die Probleme über Abdeckung, die Bedenken mit dem jQuery Umsetzung von Versprechen, oder habe ich das falsch verstanden oder verpasst Fragen?


Bearbeiten Diese Frage bezieht sich auf jQuery < 3.0; Stand jQuery 3.0 alpha jQuery ist Promises/A+ - kompatibel ist.

InformationsquelleAutor der Frage Brian M. Hunt | 2014-05-19

Schreibe einen Kommentar