这里的问题是循环内的调用并不总是在下一个调用开始之前完成。例如,有时循环首先完成。基本上我需要这个是异步的。在第一个循环结束之前,第二个循环不应该开始。
我的控制器中的循环是这样的:
for(var i = 0; i < $scope.myArr.length; i++) {
$scope.input1 = $(".input" + i).val();
$scope.input2 = $(".input" + i).val();
myService.addValues($scope.input1, $scope.input2);
}
将值发送到服务:
var addValues = function (name, sets, reps) {
return $http({
method: 'POST',
url: "URL",
headers: {
'Content-Type': 'application/json'
},
data: {
value1: value1,
value2: value2
}
}).success(function () {
console.log("Values added");
});
};
请注意,我需要循环函数在控制器中,以便它可以从视图中获取值,而http请求在我的服务中,位于另一个JS文件中。
赞赏例子!
答案 0 :(得分:1)
使用$q.all
方法以可预测的方式解析一系列promise。
http://www.martin-brennan.com/using-q-all-to-resolve-multiple-promises/
var promises = [promiseAlpha(), promiseBeta(), promiseGamma()];
$q.all(promises).then((values) => {
console.log(values[0]); // value alpha
console.log(values[1]); // value beta
console.log(values[2]); // value gamma
});
在您的应用程序中,您可能会执行以下操作:
var allPromises = [];
for(var i = 0; i < $scope.myArr.length; i++) {
$scope.input1 = $(".inputA"+ i).val();
$scope.input2 = $(".inputB" + i).val();
allPromises.push(myService.addValues($scope.input1, $scope.input2));
}
// remember to inject $q service into controller/factory
$q.all(allPromises).then(function(values){
console.log(values); // array of values in order they were added
});