I would like to handle a sequence of tasks and get informed as soon as a block of those tasks is completed and once every task is completed. The output I expect should be 1,2,3 - 4,5,6 - 7 - 8
. With my current implementation I get 1,4,7,8 - 2,5 - 3,6
function handleTasks(tasks) {
var deferred = Q();
var promises = []
tasks.forEach(function (task) {
promises.push(function () {
return handle(task);
});
});
promises.reduce(Q.when, new Q()).then(function () {
// Finished inner hunk.
deferred.resolve();
});
return deferred.promise;
}
function handle(t) {
var deferred = Q.defer();
document.write("started " + t);
Q.delay(5000).then(function () {
document.write("finished " + t);
deferred.resolve();
});
return deferred.promise;
}
var deferred = Q();
var tasks = [[1, 2, 3], [4, 5, 6], [7], [8]];
var promises = []
tasks.forEach(function (task) {
promises.push(function () {
return handleTasks(task);
});
});
promises.reduce(Q.when, new Q()).then(function () {
// Finished all tasks
deferred.resolve();
});
<script src="http://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.6/q.js"></script>