【发布时间】:2014-10-03 08:49:22
【问题描述】:
好的,这是对先前问题的重新发布,我因过度简化代码而感到困惑......
我有一个 angularjs 工厂函数,它查询解析数据库,并返回一个承诺......到目前为止,非常简单......但是,我的控制器有一个 foreach 循环,它为一系列 id 中的每一个调用该函数,这意味着然后同时解决。但是,解析不起作用,我得到的似乎是 api 调用的乱码。
这是我的代码的简化版本...
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)
})
})
}
有关该服务实际作用的更多信息...
我的应用包含一组食谱和一组配料。每种成分都有一个“父母”,可以在“合理化”版本中替代它。测试函数循环遍历每个成分,编译结果,然后返回替换成分的集合。控制器正在循环遍历食谱,以便我可以检查所有食谱的手头成分。
【问题讨论】:
-
没有列表循环,不会改变您的
ingredientIndex。如果它确实发生了变化,您不会根据结果解决
标签: angularjs asynchronous promise factory