Serial promise resolving
by Miroslaw Niepokoj
by cchana
HTML
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<div ng-app>
<div ng-controller="TestCtrl">
resolved: {{resolved|json}}
</div>
</div>
JavaScript
function TestCtrl($scope, $q, $timeout) {
$scope.resolved = [];
// function by miroslaw niepokoj
function runTasks(data) {
var defer = $q.defer();
var start = $q.when();
var nr;
for (var i=0; i<data.length; i++) {
nr = data[i];
console.log('defining for ', nr);
start = start.then(
(function(val){
console.log('return function for', val);
return function(){
console.log('invoke for', val);
var d = $q.defer();
$timeout(function(){
console.log('timeout for', val);
$scope.resolved.push(val);
d.resolve();
}, 1000);
return d.promise;
};
})(nr)
);
}// end loop
start.then(defer.resolve);
return defer.promise;
}
runTasks([9,8,7,6,5,4,3,2,1]).then(function(){
console.log('finish!');
$scope.resolved.push('finish');
});
}