I'm looking into BreezeJs and there samples are using Q.js for promises to handle asynchronous calls. John Papa is also using Q. JQuery has promises as well. What are the differences between the two?
相关问题
- Is there a limit to how many levels you can nest i
- How to toggle on Order in ReactJS
- How to fix IE ClearType + jQuery opacity problem i
- void before promise syntax
- void before promise syntax
Bergi's answer covers things fairly well. I wanted to add, though, that we've created a guide for Q users coming from jQuery. To summarize the relevant sections:
then
/pipe
.this
in which the caller must run). So there is noresolveWith
orrejectWith
.The guide also contains a table paralleling jQuery and Q promise APIs.
Both are based on the Promises/A standard and implement a
then
method (though only current jQuery, they once had a incompatiblepipe
instead ofthen
). However, there are a few differences:then
callbacks will be caught and reject the promise (and will only get re-thrown if you call.end()
). Not sure whether I personally like that. It's the standardized way which jQuery does not follow, rejecting fromthen
in jQuery deferreds is much more complicated.then
), while jQuery allows multiple arguments inresolve
/reject
calls on its Deferreds..all
and similiar, which are more complicated with jQuery ($.when.apply($, […])
).… 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.JQuery's promise implementation of the Promises/A spec has some real issues. The following link describes them far better than I can: missing-the-point-of-promises