私は 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 に答える