A deferred object is rejected when either .reject()
or .rejectWith()
is called on it.
Here's an example:
var deferred = $.Deferred();
deferred
.done(function() { console.log('done') })
.fail(function() { console.log('failed') });
deferred.resolve(); // <-- will write 'done' to console
deferred.reject(); // <-- will write 'failed' to console
You can use deferreds to make asynchronous functions behave like $.get()
does. For example setTimeout
:
function MyTimeout() {
var deferred = $.Deferred();
setTimeout(function() {
// as a demo, this will reject the deferred half the time
if (Math.random() < 0.5)
deferred.reject();
else
deferred.resolve();
}, 2000);
return deferred.promise();
}
MyTimeout()
.done(function() { console.log('done') })
.fail(function() { console.log('failed') });
The last statement can also be written as:
MyTimeout().then(
function() { console.log('done') },
function() { console.log('failed') }
);