

Using Deferreds in jQuery 1.5 - bretthopper
http://www.erichynds.com/jquery/using-deferreds-in-jquery/

======
russell_h
I don't know much about browser-side javascript, but unless they're doing
something really weird in the event loop I believe the comments

    
    
        // this might execute before the $.get() above is complete
    

and

    
    
        // something additional to execute upon success, which might, or might not,
        // have fired by now.  With $.ajax deferreds built-in, it doesn't matter.
    

are misleading. In fact, the first comment should read "this will execute
before the $.get() above is complete" and the second one should read "which
will not have fired yet".

Someone please correct me if I'm wrong on this.

~~~
mrkurt
You're not wrong in terms of the sample code, but in general the "success"
method might be called after the request is complete. It's like the "ready"
event in jQuery, you're meant to use that even after the DOMReady has fired.

------
dhimes
For a single ajax request this doesn't save much (just call the functions you
need to call from the success() method). In fact, if used poorly it may
obfuscate the program flow. However, the "when" example looks interesting. I'm
new to JS and JQ, so I haven't run into that problem yet (and known it!), but
at this point I would have to, for each ajax query, set some sort of "state"
bool and call the function I want to run. Only when all the bools were set to
true- meaning all calls found success- would the function execute. The "when"
approach is much more elegant.

~~~
wahnfrieden
You might also be interested to know that Dojo has DeferredList for tracking
several Deferred objects (the equivalent of jQuery promises). The DeferredList
is itself a Deferred which is activated once all the Deferreds in it execute.

------
bergie
Ah, great. I had a situation today where the when/then deferred would've
simplified my code quite a bit. Now I just need to upgrade jQuery and clean up
the quick hack I did in the place :-)

[https://github.com/bergie/midgardmvc_ui_create/blob/master/s...](https://github.com/bergie/midgardmvc_ui_create/blob/master/static/js/editable.js#L255)

