Deferred, without an ajax call

by GregWoods

JavaScript

var promises = [];

function doThreeThings() {
	promises = [];
	
    for (var n = 0; n < 3; n++) {
        promises.push(doOneThing(n));
    }
  
	jQuery.when.apply(jQuery, promises).done(function () {
		alert('all three done!');
	});

}

function doOneThing(n) {
    //here, we would usually perform an ajax async call, which returns a deferred object to pass
    //  back to our caller, which stores it and uses 'when' to execute code when all are 'resolved'
    var dfd = jQuery.Deferred();
    alert(n + " : " + dfd.state());
    return dfd;
}


doThreeThings();

//at some later time, we resolve() each promise
promises[0].resolve();
promises[2].resolve();
promises[1].resolve();