Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环应该如何等待内部函数在angularjs中完成其执行?_Javascript_Angularjs - Fatal编程技术网

Javascript for循环应该如何等待内部函数在angularjs中完成其执行?

Javascript for循环应该如何等待内部函数在angularjs中完成其执行?,javascript,angularjs,Javascript,Angularjs,我有一个数组$scope.requisition,其中有三个元素,对于每个元素,我执行一些任务(api调用并获取一些数据),但是我得到的输出是“item1”“item1”“item2”“item2”,这是不同步的。我希望循环等待api获取数据,然后执行下一个未执行的执行 预期产出为: 第一次执行(“第1项”“第2项”) 第二次执行(“第1项”“第2项”) 第三次执行(“第1项”“第2项”) 我是这个框架的新手,所以我不知道如何做到这一点。承诺是异步的,但您可以通过创建一个计数器变量并将承诺放

我有一个数组
$scope.requisition
,其中有三个元素,对于每个元素,我执行一些任务(api调用并获取一些数据),但是我得到的输出是“item1”“item1”“item2”“item2”,这是不同步的。我希望循环等待api获取数据,然后执行下一个未执行的执行

预期产出为:

  • 第一次执行(“第1项”“第2项”)
  • 第二次执行(“第1项”“第2项”)
  • 第三次执行(“第1项”“第2项”)

我是这个框架的新手,所以我不知道如何做到这一点。

承诺是异步的,但您可以通过创建一个计数器变量并将承诺放在一个函数中来解决这个问题,该函数在成功时递归地调用自己,然后递增计数器直到达到最后一个索引。 片段:


承诺是异步的,但是您可以通过创建一个计数器变量并将承诺放在一个函数中来解决这个问题,该函数在成功时递归地调用自己,然后递增计数器直到达到最后一个索引。 片段:


承诺的概念本身是异步的,你应该重新考虑你的算法承诺的概念本身可能是异步的,你应该重新考虑你的算法可能是异步的
for(var index in $scope.requisition){
    var tableName = JSON.parse($scope.requisition[index].applyFormConfig).table;
    console.log("item1 "+JSON.stringify($scope.requisition[index]));

    privateMetadata.getCustomFieldNames({entityName:tableName}).$promise.then(function(results) {
        $scope.target.tableFields = normalizeObjects(results);
        console.log("item2 "+JSON.parse($scope.requisition[index].applyFormConfig).items);
        angular.forEach(JSON.parse($scope.requisition[index].applyFormConfig).items,function(item){
            var mappedJsonObj = getObjectByIdFromArray(item.id, $scope.target.tableFields);
        });
    });
}; 
var index = 0;
$scope.myFunction = function(){
    var tableName = JSON.parse($scope.requisition[index].applyFormConfig).table;
    console.log("item1 "+JSON.stringify($scope.requisition[index]));

    privateMetadata.getCustomFieldNames({entityName:tableName}).$promise.then(function(results) {
        $scope.target.tableFields = normalizeObjects(results);
        console.log("item2 "+JSON.parse($scope.requisition[index].applyFormConfig).items);
        angular.forEach(JSON.parse($scope.requisition[index].applyFormConfig).items,function(item){
            var mappedJsonObj = getObjectByIdFromArray(item.id, $scope.target.tableFields);
        });
        if(index!=$scope.requisition.length - 1){
            index++;
            $scope.myFunction();
        }
    });
}