A quick note on jQuery.Deferred()
Just a quick note on jQuery Deferred objects…
1: var goGetSomeHtml = function() {
2: var deferred = $.Deferred();
3: $.ajax({
4: url: “some.htm”
5: }).done(function(data) {
6: deferred.resolve(data);
7: }).fail(function(jqXHR, textStatus) {
8: deferred.reject({ xhr:jqXHR, textStatus: textStatus });
9: });
10: return deferred.promise();
11: };
They’re basically a callback wrapper. This example is a bit redundant since jQuery $.ajax returns a Deferred already, but you get the idea. You can use this for anything that requires a callback. It provides a pattern that pushes the callback function into user code in a way that is standardized. The resolve and reject functions on deferred pass their parameters into the callbacks in the done/fail functions.
This lets you pass the deferred promise around (a promise is just a deferred with the resolve/reject removed from its interface). A bit cleaner functional approach that removes the need for you to worry about call/apply syntax and context.
The above can then be used like this:
1: $.when(
2: goGetSomeHtml()
3: ).done(function(data) {
4: //do success callback stuff here...
5: }).fail(function(state) {
6: //use state.xhr or state.textStatus to handle the error somehow.
7: }
Enjoy.
Comments
Comments are closed