2015-09-28 7 views
7

Was sind die Profis & Nachteile von Javascript Promises vs jQuery Deferred Objects?Javascript Promise vs jQuery Zurückgestellt

Zum Beispiel, welche Probleme haben sie jeweils, wenn überhaupt?

Ein Kollege Stapelüberlauf-Mitglied sagte:

"... real Versprechungen sind real, und falsche Versprechungen sind gefälscht."

Was meinte er damit?

+0

Irgendein Typ hat wahrscheinlich Recht, aber das ist kein guter Weg, das Argument zu klären. Pistolen im Morgengrauen. – Pointy

+0

Irgendein Typ irrt sich, rein seit IE Javascriptversprechen nicht unterstützt und es noch nicht reif ist. in der Zukunft wird er recht haben. – Saar

+0

@ Pointy, lol, nun, ich bin auf der Suche nach einer Antwort (nicht versuchen, dies zu debattieren). Wenn er recht hat, würde ich gerne wissen warum und nicht auf seine kryptische Antwort verlassen. – picokol

Antwort

9

Es gibt kein "echtes Versprechen" oder ein "falsches Versprechen". Es gibt vielversprechende Implementierungen, die den aktuellen Standards folgen, und es gibt vielversprechende Implementierungen, die nicht den aktuellen Standards folgen. Es gibt kein inhärentes Attribut eines Versprechens, das sagt, dass es "echt" oder "falsch" ist. Sie sind Bits von Javascript, die ein Standardverhalten implementieren.

Jede vielversprechende Implementierung, die dem Standard streng entspricht, sollte in Ordnung sein und sollte mit anderen Standard-Implementierungen kompatibel sein. Die meisten werden die Interoperabilität und die Einhaltung akzeptierter Standards als ein nützliches Merkmal betrachten.

Nun, jQuery Versprechen folgen nicht den Versprechen Standards, wo einige Leute schlecht von jQuery verspricht. Sie arbeiten anscheinend daran, sie zu einem Standard für eine zukünftige Version von jQuery zu machen, aber sie weichen derzeit in vielerlei Hinsicht von den Standards ab. Dies führt zu Problemen, da Sie bei der Verwendung von jQuery-Versprechungen anders codieren müssen als bei der Verwendung von Standardversprechen. Daher sieht der jQuery-Versprechenscode nicht genauso aus wie der ES6-Versprechenscode.

Probleme in jQuery Promises

this reference für eine Liste der Probleme mit den aktuellen jQuery Versprechen See. Die beiden wichtigsten sind ein Problem mit der Fehlerbehandlung in abgelehnten Versprechen und eine Inkonsistenz in der Reihenfolge der Ausführung von Rückrufe, die zu unvorhersehbaren oder inkonsistenten Codeausführung führen können. Alle .then() Handler sollen async ausgeführt werden (nachdem der aktuelle Thread von JS abwickelt). jQuery Versprechungen tun dies nicht immer und es kann Probleme in einigen Arten von Code verursachen.

Bundesstaat india Promises in Browser

Mutter Versprechen sind eine etwas neue Sache in Browsern, es ist so noch nicht der Fall, dass Sie nur auf die Tatsache verlassen, dass alle Browser, die Ihre Website treffen könnte notwendigerweise native Versprechungen eingebaut haben. Native Versprechungen sind in Browsern integriert, beginnend mit Safari 7.1, Firefox 29, Chrome 32, Edge, Android 4.4.4, IOS 8.4 und noch nicht in IE verfügbar (Stand September 2015). Sie benötigen also immer noch einen relativ neuen Browser, um die Unterstützung von nativen Versprechen zu erhalten. Als solche gibt es viele ausgezeichnete Versprechen Bibliotheken, die entweder eine Polyfill oder eine Full-on-Ersatz bieten können, so dass Ihr Code die Möglichkeit, Versprechen in jedem Browser mit wirklich keine Kompromisse im Vergleich zu nativen Versprechen zu verwenden.

+0

Ich würde es mögen, wenn dies einen Kommentar darüber enthalten würde, wie JavaScript-Versprechen in den meisten Browsern jetzt nativ sind, einschließlich Microsofts neuer Edge, jedoch wird es immer Probleme mit der alten Browserkompatibilität (IE) geben. Ansonsten denke ich, das ist eine gute Antwort auf meine Frage. – picokol

+0

@picokol - Ich habe einen Kommentar zum Status von nativen Versprechen in Browsern hinzugefügt. – jfriend00

3

JavaScript-Versprechen sind besser, weil es dem Standard entspricht. Eines Tages werden sie nativ auf allen Browsern verfügbar sein. Fürs Erste können Sie heute etwas wie babel verwenden, um ES6 Promises zu verwenden: https://babeljs.io/docs/learn-es2015/#promises.