A deferred array resolution
by samdelagarza
HTML
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<!-- no html here -->
<button id='success'>Successfully load apps</button>
<button id='failure'>Simulate a failure in loading apps</button>
JavaScript
var
loadAppPromises = [],
simAppLoader = function (appName, successfully) {
var deferred = new $.Deferred();
setTimeout(function () {
console.log(appName + ' loaded: ' + successfully);
successfully ? deferred.resolve() : deferred.reject(appName);
}, 0);
return deferred.promise();
},
allAppsLoaded = function () {
console.log('all apps were loaded');
},
appFailed = function(appName){
console.log(appName + ' failed to load');
},
loadSuccessfully = true,
loadApps = function loadApps(loadSuccessfully) {
console.clear();
loadAppPromises.push(simAppLoader('app1', loadSuccessfully));
loadAppPromises.push(simAppLoader('app2', loadSuccessfully));
loadAppPromises.push(simAppLoader('app3', loadSuccessfully));
loadAppPromises.push(simAppLoader('app4', loadSuccessfully));
loadAppPromises.push(simAppLoader('app5', loadSuccessfully));
loadAppPromises.push(simAppLoader('app6', loadSuccessfully));
$.when.apply({},loadAppPromises)
.then(allAppsLoaded, appFailed)
.fail(function(){
console.log('failure');
})
.always(function () {
console.log('always run this, even before all results are returned.');
});
};
$(function(){
$('#success').on('click',function(){ loadApps(true); });
$('#failure').on('click',function(){ loadApps(false); });
});