Q.js promise test

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/q.js/0.9.6/q.js"></script>

JavaScript

var work_items = [ 'A','B','C','D','E','F','G','H','I' ];
var wait = 3000;
function getWorkPromise(item) {
	console.log("Starting " + item);
	var deferred = Q.defer();
	setTimeout(function () {
		var status = "Finished " + item;
		console.log(status);
		deferred.resolve(status);             
	}, wait);
	return deferred.promise;
};

function doAsyncStuffInGroups(arr, n) {
    return arr.map(function(currentValue, i) {
		return (i % n === 0) ? arr.slice(i, i+n) : null;
    }).filter(function(item) {
		return item;
	}).reduce(function(promise, group) {
		return promise.then(function() {
			return Q.all(group.map(function(item) {
				return getWorkPromise(item);
			}));
		});
	}, Q());
}

doAsyncStuffInGroups(work_items, 2).then(function() {
	console.log("All done");
});