Deferred Object
/*
you can create your own long running operations and allow other developers to register
event handlers.
Deferred object is used to manage long running operations and raise events on completion,
failure etc
Background:
ECMAScript 2015 (a.k.a. ECMAScript 6) introduced a native means to deal with such situations:promises
jQuery provided and still provides its own flavor of promises, called Deferred objects.
They were introduced to jQuery years before promises were introduced to ECMAScript
*/
// Background script
function LongRunningScript() {
//1. create a deferred object
var deferred = $.Deferred();
//2. run your async operation
// call resolve for success
deferred.resolve();
// call reject for failure
deferred.reject();
//3. return a promise
return deferred.promise();
}
// Actual script
var promise = LongRunningScript();
promise.done(function() {
// do something
});
// ANOTHER EXAMPLE
function timeout(milliseconds) {
// Create a new Deferred object
var deferred = $.Deferred();
// Resolve the Deferred after the amount of time specified by milliseconds
setTimeout(deferred.resolve, milliseconds);
// here we didn't do deferred.resolve(), because setTimeout does that after specified milliseconds
// Return the Deferred's Promise object
return deferred.promise();
}
timeout(1000).then(function() {
console.log('I waited for 1 second!');
});
// you can directly use 'then' on Ajax methods
$.getJSON('https://api.github.com/user/' + username + '/repositories')
.then(function(repositories) {
return repositories[0].name;
});