Ok, this is a re-posting of a previous question which I'd confused by over-simplifying the code...
I have an angularjs factory function which queries a parse database, and returns a promise ... so far, pretty simple... however, my controller has a foreach loop which calls the function for each of a range of ids, which are meant to then resolve concurrently. The resolve doesn't work, however, and what I get back appears to be a garbled mixture of the api calls.
Here's a simplified version of my code...
app.factory('MyFactory', function($http, $q ) {
  return {
    testFunction: function (ingredientList) {
      var deferred = $q.defer()
      ingredientIndex=-1
      var regulariseIngredient=function() {
        ingredientIndex++
        if (ingredientIndex>ingredientList.length-1) {
          deferred.resolve(ingredientList);
          return
        }
        (new Parse.Query("Ingredient"))
        .equalTo("type", ingredientList[ingredientIndex].type)
        .equalTo("name", ingredientList[ingredientIndex].name)
        .include("parent")
        .find().then(function(result) {
          result=result[0]
          if(result.get("parent")) result=result.get("parent")                        
          ingredientList[ingredientIndex]=result
          regulariseIngredient();
         })                               
       }
       regulariseIngredient()
       return deferred.promise
    }
  }
}
app.controller('TestController', function($scope,MyFactory) {
  recipes = [ An array of objects, each with an ingredients array]
  angular.forEach(recipes, function(recipe) { 
    MyFactory.testFunction(recipe.ingredients).then(function(result) {
      console.log(result)
    })
  })
} 
Bit more info on what the service actually does...
my app has a collection of recipes, and a collection of ingredients. Each ingredient has a 'parent' which substitutes it in the 'rationalised' version. The test function loops through each ingredient, compiles the outcome and then returns a collection of substituted ingredients. The controller is looping through the recipes, so that I can check the ingredients on hand of all recipes.
 
     
     
    