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".
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.
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 :-)
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.
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.
6 comments
[ 2.9 ms ] story [ 28.8 ms ] threadSomeone please correct me if I'm wrong on this.
https://github.com/bergie/midgardmvc_ui_create/blob/master/s...