我有一个数组$scope.requisition
,里面有三个元素,对于每个元素,我正在执行一些任务(api调用并获取一些数据),但我得到的输出是“item1” “item1”“item1”“item2”“item2”“item2”不同步。我想要的是循环等待api获取数据,然后进行下一次没有发生的执行。
预期的输出是:
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);
});
});
};
我是这个框架的新手,所以我不知道该怎么做。
答案 0 :(得分:0)
Promise是异步的,但你可以通过创建一个计数器变量并将你的promise放在一个成功递归调用自身的函数中,然后递增计数器直到达到最后一个索引来解决这个问题。 片段:
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();
}
});
}