Angularjs 让我的电话同步

Angularjs 让我的电话同步,angularjs,loops,asynchronous,Angularjs,Loops,Asynchronous,这里的问题是,循环中的调用并不总是在下一个调用开始之前完成。例如,有时循环首先完成。基本上我需要它是异步的。在第一个循环完成之前,不应开始第二个循环 控制器中的循环如下所示: for(var i = 0; i < $scope.myArr.length; i++) { $scope.input1 = $(".input" + i).val(); $scope.input2 = $(".input" + i).val(); myService.addValue

这里的问题是,循环中的调用并不总是在下一个调用开始之前完成。例如,有时循环首先完成。基本上我需要它是异步的。在第一个循环完成之前,不应开始第二个循环

控制器中的循环如下所示:

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);
}
请注意,我需要将循环函数放在控制器中,这样它就可以从视图中获取值,而http请求位于另一个JS文件上的我的服务中


实例不胜感激

研究使用
$q.all
方法以可预测的方式解析承诺数组

在应用程序中,您可以执行以下操作:

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
});
var-allPromises=[];
对于(变量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));
}
//记住将$q服务注入控制器/工厂
$q.all(所有承诺)。然后(函数(值){
console.log(values);//按添加顺序排列的值数组
});

您正在执行ajax请求,这意味着异步。如果您想要有序的结果,那么使用同步请求,或者在处理结果之前等待所有请求完成。循环的意义是什么?您根本没有引用
i
$scope.myArr
中的元素……感谢您的回答,我已经仔细研究了一下。然而,我不知道如何将其应用到我的案例中,添加了一个更全面的示例。如果是GET请求,我可以看出这是可行的,但由于这是一个帖子,数据在被推到“allPromises”的同时被发布(以错误的顺序),所以在启动第二篇帖子之前,你需要先解决第一个承诺吗?这有点不同……是的,他们应该按照与循环相同的顺序发出POST请求。现在,它们以异步方式/随机顺序发布到数据库。有什么解决办法吗?
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
});