Javascript 在我的angular js代码中,循环中的服务函数只有在完成所有迭代之后才执行
控制器页Javascript 在我的angular js代码中,循环中的服务函数只有在完成所有迭代之后才执行,javascript,angularjs,Javascript,Angularjs,控制器页 $scope.page = { '1' : "small", '2' : "large", '3': "medium" }; $scope.form.appraisal_id = "abc123"; $scope.form.user_id = "efg123"; for(var prop in $scope.page){ $scope.form.question_id =
$scope.page = {
'1' : "small",
'2' : "large",
'3': "medium"
};
$scope.form.appraisal_id = "abc123";
$scope.form.user_id = "efg123";
for(var prop in $scope.page){
$scope.form.question_id = prop;
$scope.form.answer = $scope.page[prop]
console.log($scope.form);
appraisalService.saveForm($scope.form,function(result){
$scope.sent=result
console.log($scope.sent)
});
};
我的成绩
对象{评估id:“abc123”,用户id:“efg123”,问题id:“1”,回答:“小”}
对象{评估id:“abc123”,用户id:“efg123”,问题id:“2”,回答:“大”}
对象{评估id:“abc123”,用户id:“efg123”,问题id:“3”,回答:“中等”}
资源{u_v:0,评估id:“abc123”,用户id:“efg123”,问题id:3,回答:“中等”…}
资源{u_v:0,评估id:“abc123”,用户id:“efg123”,问题id:3,回答:“中等”…}
资源{u_v:0,评估id:“abc123”,用户id:“efg123”,问题id:3,回答:“中等”…}
期望输出
对象{评估id:“abc123”,用户id:“efg123”,问题id:“1”,回答:“小”}
对象{评估id:“abc123”,用户id:“efg123”,问题id:“2”,回答:“大”}
对象{评估id:“abc123”,用户id:“efg123”,问题id:“3”,回答:“中等”}
资源{u_v:0,评估id:“abc123”,用户id:“efg123”,问题id:1,回答:“小”…}
资源{u_v:0,评估id:“abc123”,用户id:“efg123”,问题id:2,回答:“大型”…}
资源{u_v:0,评估id:“abc123”,用户id:“efg123”,问题id:3,回答:“中等”…}
尝试使用
$q
var promises = [];
for(var prop in $scope.page) {
$scope.form.question_id = prop;
$scope.form.answer = $scope.page[prop]
promises.push(appraisalService.saveForm($scope.form, function(result){
return result;
}));
}
$q.all(promises).then(function(result) {
console.log(result);
});
您的evaluationservice
调用是异步的,因此循环在第一个异步调用完成之前就完成了(因此它只捕获最后一个调用)
您可以将evaluationservice
的每个承诺推送到一个数组中,然后使用$q.all
等待所有承诺都解决后,再记录结果(或使用它执行任何操作)
如果您不熟悉
$q
,它会带有角度。只需注入它。cuz异步代码。@KevinB,lol这是我所见过的最简洁、最完美的答案……你能提出一个解决方案来摆脱这些问题吗?它没有问题,没有什么需要修复的。它按预期工作。您在3控制台上看到的奇怪之处。资源的日志相同是由于控制台如何处理扩展对象。如果您从资源中记录问题id,则会得到3个不同的id。