2017-05-03 4 views
0

AngularJS에 개체가 포함 된 배열이 있습니다. 이러한 객체의 속성 값 (snooz)을 기반으로 POST 요청 (getData.sonnzeUpdate())을 호출해야합니다. 배열의 각 객체를 살펴본 후 마침내 GET 요청을 호출해야합니다. 내 문제는 POST 요청의 응답 (res in .then(function(res){})을 받기 전에 GET 요청 (함수 $scope.getTableData 내부)이 실행 된 것입니다.Ajax for each 루프 호출 각도 각도

나는 angular.forEach(으로 시도했으며 $q으로 시도했습니다. 그들이 완료 한 후, 그 배열에 약속을 추가하기 때문에, $q.all(notifiedAlarms) :

여기에 내 코드 샘플 코드에서

var notifiedAlarms = []; 
var d = new Date(); 
var checkTine = d.getHours() + "-" + d.getMinutes() + "-" + "00"; 

angular.forEach(snoozedData, function (snoozed_asset, asset_key) { 
    if (snoozed_asset.snooz == checkTine) { 
     var data = {}; 
     snoozed_asset.snooz = ''; 
     data.data = snoozed_asset; 

     var deferred = $q.defer(); 
     getData.sonnzeUpdate(data).then(function (res) { 
      if (res.status == '200') { 
       toastr.info('Alarm with property ' + data.data.actualFailureArea + ' is activated'); 
       // $scope.getTableData(); //donot want to call it here. as same call will for multiple time 
       notifiedAlarms.push(deferred.promise); 
      } else { 
       // console.log('Error in update'); 
      } 
     }); 
    } else { 
     // no matching snooz 
    } 
}); 
$q.all(notifiedAlarms).then($scope.getTableData()); 
+0

발전기가 이러한 종류의 물건에도 적합하다는 점에 유의하십시오. 모든 약속 물건을 정리합니다. 다운 레벨 발생기는 여전히 TS에서는 문제가있다. –

+0

여기에 업데이트 된 코드 – SSS

답변

0

, notifiedAlarms은 그 시점에서 비어 있습니다.

지연된 반 패턴을 피하십시오. getData.sonnzeUpdate()은 이미 당신에게 약속을 돌려줍니다. $q.all(notifiedAlarms).then($scope.getTableData())

angular.forEach(snoozedData, function (snoozed_asset, asset_key) { 
    if (snoozed_asset.snooz != checkTine) return; 
    snoozed_asset.snooz = ''; 

    notifiedAlarms.push(
     getData.sonnzeUpdate({ data: snoozed_asset }).then(function(res) { 
      if (res.status == '200') { 
       toastr.info('Alarm with property ' + data.data.actualFailureArea + ' is activated'); 
      } else { 
       throw new Error('Error in update'); 
      } 
     }) 
    ); 
}); 
+0

안녕하세요, 업데이트 해 주셔서 감사합니다. 내 _ $ scope.getTableData_ 서비스를 호출 할 위치는 어디입니까? 내 관심사는이 서비스를 호출하는 것입니다. – SSS

0

당신은 약속이 해결되면 그것을 전화를 말하는 대신 직접 $scope.getTableData()을 실행하고 있습니다. 그러므로, 당신이 원하는 것보다 빨리 실행됩니다.

희망하는 동작을 얻으려면 $q.all(notifiedAlarms).then($scope.getTableData);으로 변경하십시오. ,

myownservice.UpdateSomeData().then($scope.setValue) 
myownservice.UpdateSomeData().then($scope.setValue2()) 

바이올린에, 나는 두 가지를 얼마나

jsfiddle example

공지 사항 그리고, HTML 만 value가 업데이트 될 때와하지 value2

:

다음은이 정성 들여 예입니다

+0

죄송합니다! 작동하지 않습니다 : (같은 실행 ..... 그것은 응답을 얻기 전에 서비스로갑니다. _getTableData() _ 다음은 toastr입니다. – SSS

+0

@SSS 당신은 코드를 plunker 나 fiddle에 넣어서 지역 API를 사용하여 모방 API를 재현 할 수 있습니까? JSON 파일? 작업 예제를 보지 않고 잘못된 점을 말할 수 없습니다. – tanmay

+0

예, 링크를 공유합니다. – SSS