2015-09-28 19 views
7

プロとは何ですか?& Javascript Promises vs jQuery Deferred Objectsの短所はありますか?Javascript Promise vs jQuery Deferred

たとえば、もしあれば、彼らにはどんな問題がありますか?

仲間のスタックオーバーフローのメンバーは次のように述べています

「...本当の約束は本物であり、偽の約束は偽物です。」

これはどういう意味ですか?

+0

人はおそらく正しいですが、これは引数を解決する良い方法ではありません。夜明けのピストルズ。 – Pointy

+0

いくつかの男は間違いです、純粋にIEはJavaScriptの約束をサポートしていないので、まだ成熟していません。将来的に彼は正しいでしょう。 – Saar

+0

@Pointy、笑よく、私は正当に答えを探している(これについて議論しようとしていない)。もし彼が正しいのであれば、私は理由を知りたいのですが、彼の不可解な反応に頼ることはありません。 – picokol

答えて

9

"本物の約束"や "偽の約束"などはありません。 が現在の標準に従うことを約束する実装があり、に従うことを約束しているの実装があります。それが「本当の」または「偽の」と言う約束の本質的な属性はありません。それらは、標準的な動作を実装するJavascriptのビットです。

標準を徹底的に遵守していると思われる実装は、使用するには細かいものでなければならず、他の標準的な約束の実装と相互運用可能でなければなりません。ほとんどの場合、相互運用性と受け入れられた標準への準拠が有用な特性を考慮する。

今、jQueryの約束は、jQueryの約束を悪いと言っている約束の基準に従わないことを約束しています。彼らは明らかにjQueryの将来のバージョンのためにそれらを標準にすることに取り組んでいますが、現在は多くの点で標準から逸脱しています。これは、jQueryの約束を使用するときに、標準の約束を使用する場合とは異なる方法でコードを書く必要があるという問題につながります。だから、jQueryの約束コードはES6の約束コードと同じに見えません。 jQueryので

の問題は、現在のjQueryの約束と問題のリストを参照してくださいthis reference

をお約束します。 2つの主なものは、の間でエラー処理を伴うの問題です。実行順序が矛盾して、という予測できないコードの実行につながる可能性があります。 .then()すべてのハンドラは、非同期に実行されるはずです(JSの現在のスレッドがアンワインドした後)。 jQueryの約束は必ずしもそうとは限らず、ある種のコードでは問題を引き起こす可能性があります。ブラウザネイティブ約束の

ネイティブの約束は、ブラウザでやや新しいものなので、それはまだあなたがちょうど必ずしもあなたのサイトにヒットする可能性のあるすべてのブラウザがあるという事実に頼ることができる場合ではありませんSafari 7.1、Firefox 29、Chrome 32、Edge、Android 4.4.4、IOS 8.4から始まり、まだIEでは利用できないブラウザ(2015年9月現在)から、ネイティブの約束が組み込まれています。だから、ネイティブの約束をサポートするためには、かなり新しいブラウザが必要です。そのため、ポリ充てんまたはフルオンのいずれかを提供できる優れた約束図書館が数多くあります。そのため、コードにネイティブの約束を妥協することなく、いかなるブラウザでも約束することができます。

+0

これは、JavaScriptの約束事が、現在Microsoftの新しいEdgeを含むほとんどのブラウザでどのようにネイティブであるかに関するいくつかのコメントが含まれていれば嬉しいですが、古いブラウザの互換性(IE)には常に問題があります。それ以外は、これは私の質問に対する良い答えだと思います。 – picokol

+0

@picokol - 私はブラウザの本来の約束の状態についてコメントを追加しました。 – jfriend00

3

JavaScriptの規約は標準に準拠しているため、より優れています。ある日、彼らはすべてのブラウザでネイティブで利用できるようになります。今のところあなたは今日のES6 Promisesを使用するためにバベルのようなものを使うことができます:https://babeljs.io/docs/learn-es2015/#promises