var app = angular.module('app', []); app.controller('MyController', function($scope, $q, $timeout){ $scope.promises = []; var d = $q.defer(); var promise = d.promise; /* for (var i = 0; i < 10; i++) { (function(n) { promise = promise.then(function(data){ var d = $q.defer(); console.log(data); $timeout(function(){ return d.resolve('done' + n); }, 2000); return d.promise; }); })(i); } */ for (var i = 0; i < 10; i++) { promise = promise.then((function(n){ return function(data) { var time = Math.floor(5000 * Math.random()); var d = $q.defer(); console.log(data); $timeout(function(){ $scope.promises.push(data); return d.resolve('done: ' + n + ' time: '+ time); }, time); return d.promise; } })(i)); } d.resolve('start'); /* var promise = d.promise.then(function(data) { console.log(data); var d = $q.defer(); $timeout(function(){ return d.resolve('done 3'); }, 2000); return d.promise; }) .then(function(data) { console.log(data); return 'done 4'; }) .then(function(data) { var d = $q.defer(); $timeout(function(){ return d.resolve('done 5'); }, 1000); return d.promise; }) .then(function(data) { console.log(data); return 'done 6'; }) .then(function(data) { console.log(data); return 'done 7'; }); */ });
<div ng-app="app"> <div ng-controller="MyController"> <ul> <li ng-repeat="value in promises">{{$index}} : {{value}}</li> </ul> </div> </div>
</style> <!-- Ugly Hack to make remote files preload in jsFiddle --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script> <style>