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); });
});