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