Saya memiliki array $scope.requisition yang memiliki tiga elemen di dalamnya dan, untuk setiap elemen, saya melakukan beberapa tugas (panggilan api dan mengambil beberapa data), tetapi output yang saya dapatkan adalah "item1" "item1" "item1" "item2" "item2" "item2" yang tidak sinkron. Yang saya inginkan adalah loop menunggu api untuk mengambil data dan kemudian pergi untuk eksekusi berikutnya yang tidak terjadi.

Keluaran yang diharapkan adalah:

  • Eksekusi pertama("item1" "item2")
  • Eksekusi ke-2("item1" "item2")
  • Eksekusi ke-3("item1" "item2")
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);
        });
    });
}; 

Saya baru mengenal kerangka kerja ini jadi saya tidak tahu bagaimana melakukan ini.

1
Satish Kumar 12 November 2017, 00:25

1 menjawab

Jawaban Terbaik

Janji tidak sinkron, tetapi Anda dapat menyiasatinya dengan membuat variabel penghitung dan meletakkan janji Anda dalam fungsi yang secara rekursif memanggil dirinya sendiri saat berhasil, lalu menambah penghitung hingga indeks terakhir tercapai. Potongan:

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();
        }
    });
}
0
Ayo K 13 November 2017, 12:44