34

私は BreezeJs を調べてますが、非同期呼び出しを処理する約束のためにQ.jsを使用しているサンプルがあります。John Papaも Q を使用しています。JQuery にも約束があります。2つの違いは何ですか?

4

3 に答える 3

49

どちらもPromises/A 標準に基づいており、メソッドを実装してthenいます (現在の jQuery のみですが、以前は のpipe代わりに互換性がありませんでしたthen)。ただし、いくつかの違いがあります。

  • Q には例外処理があります。非同期thenコールバックでスローされたすべてのエラーがキャッチされ、promise が拒否されます (また、 を呼び出した場合にのみ再スローされます.end())。個人的に好きかどうかは不明。これは jQuery が従わない標準化された方法であり、jQuery deferreds での拒否thenははるかに複雑です。
  • Q の promise は単一の値/理由で解決されますが (から返す/投げるなどthen)、jQuery ではその Deferredでresolve/呼び出しで複数の引数を使用できます。reject
  • Q には、将来の値を変更できるProxy メソッドがたくさんあります。
  • Q には.allと 類似のものがありますが、これらは jQuery ではより複雑です ( $.when.apply($, […]))。
  • Q does explicitly work with ticks in the event loop and guarantees asynchronity, while jQuery can be synchronous as well. This is now required by the Promises A/+ specification.

… which is basically Promises/B. As you can see, the Q API is more powerful, and (imho) better designed. Depending on what you want to do, Q could be the better choice, but maybe jQuery (especially if already included) is enough.

于 2012-11-28T18:26:37.150 に答える
18

Promises/A 仕様の JQuery の promise 実装には、実際の問題がいくつかあります。次のリンクは、私ができるよりもはるかによく説明しています

于 2013-03-20T17:03:29.630 に答える