私は BreezeJs を調べています。非同期呼び出しを処理するプロミスに Q.js を使用しているサンプルがあります。 John Papa もQを使用しています。 JQueryにもpromiseがあります 。 2つの違いは何ですか?
どちらも Promises/A標準 に基づいており、then
メソッドを実装しています(現在のjQueryのみですが、以前はpipe
ではなく、互換性のないthen
がありました)。ただし、いくつかの違いがあります。
then
コールバックでスローされたすべてのエラーがキャッチされ、Promiseが拒否されます(.end()
を呼び出した場合にのみ再スローされます)。私が個人的に気に入っているかどうかはわかりません。これは、jQueryが従わない標準化された方法です jQueryの遅延でthen
を拒否することは、はるかに複雑です 。then
から返す/スローするなど)で解決されますが、jQueryはそのDeferredのresolve
/reject
呼び出しで複数の引数を許可します。.all
_ があり、jQuery($.when.apply($, […])
)でさらに複雑になります。…基本的には Promises/B です。ご覧のとおり、Q
APIはより強力であり、(imho)よりよく設計されています。何をしたいかによっては、Q
の方が適していますが、おそらくjQuery(特に既に組み込まれている場合)で十分です。
JQueryのPromises/A仕様のpromise実装には、いくつかの実際の問題があります。次のリンクはそれらを私よりもはるかによく説明しています: missing-the-point-of-promises
ベルギの答えはかなりうまくカバーしています。ただし、追加したかったのは jQueryからのQユーザー向けのガイド です。関連セクションを要約するには:
then
/pipe
からのチェーンのみを許可します。this
を返すことはありません)。したがって、resolveWith
やrejectWith
はありません。このガイドには、jQueryおよびQ promise APIに対応する表も含まれています。