Since you are using Angular.js, you should use the binding function here:
var promise = doQuery(0); for (var i = 1; i < 10; i++) { promise = promise.then(angular.bind(null, doQuery, i)); }
Without relying on Angular.js, you can use closure to make a copy of i for each callback function (instead of all using the same copy of i in the outer scope):
var promise = doQuery(0); for (var i = 1; i < 10; i++) { promise = promise.then(function(i){ return function(){ doQuery(i); }; }(i)); }
In modern Javascript engines, you can also use your own Function.prototype.bind :
var promise = doQuery(0); for (var i = 1; i < 10; i++) { promise = promise.then(doQuery.bind(null, i)); }
source share