2016-10-28 5 views
0

POST 및 DELETE 작업을 각각 수행하는 2 개의 다른 루프가 있습니다. 일단 모든 작업이 완료되면 다른 서비스 요청을 원합니다.비동기 적으로 약속 해결

내 문제는 : 삭제 작업 중에 오류가 발생하면 컨트롤이 catch 블록으로 이동하고 항목을 계속 삭제해야하는지 결정하는 대화 상자 확인이 필요합니다.

대화 상자의 확인 메시지가 나타나면 ID를 영구히 삭제하고 싶습니다. 그러나 어떻게 든 새로 고침은 내가 원하는 것보다 먼저 호출됩니다. 나는 여기에 근본적인 무언가를 놓친다. 이 함수는 var defer = $q.defer(); 시작이있을 때, 함수의 마지막 줄은 일반적으로 있어야 할 기본 규칙으로

function submitAndRefresh(){ 
    var deletePromisesTasks = []; 
    var addPromisesTasks = []; 

    angular.forEach(toBeDeleted, function(value,key){ 
     deletePromisesTasks.push(delete(value.id)); 
    }); 

    angular.forEach(toBeAdded, function(value,key){ 
     addPromisesTasks.push(add(value)); 
    }); 

    //To be performed after all the add/delete operations are completely done! 
    $q.all(deletePromisesTasks,addPromisesTasks).then(function(){ 
     refreshData(); //Another Service Call 
    }); 
} 

function delete(id, purge_flag) { 
     var defer = $q.defer(); 
     deleteOrPurge(id, purge_flag).then((promise1) => { 
      defer.resolve(); 
     }).catch(function(error) { 
       confirmAndDeleteContractParameters(error, delete, id, true); 
     }).finally(function(){ 
      return defer.promise; 
     }); 
    } 

function deleteOrPurge(id, purge_flag){ 
    return Service.items().delete({ 
     id: id, 
     purge_flag: purge_flag || false 
     }).$promise; 
} 



function confirmAndDelete(error, callback, parameterId, purge_flag) { 
     var confirmModal = { 
      header: 'Confirm', 
      showCancelButton: true 
     }; 
     try { 
      confirmModal.body = 'Some msg. Do you want to continue?'; 
     } catch (e) {} 
     ModalService.confirmDialog($scope, confirmModal, function(confirm){ 
      if (confirm) { 
       callback(parameterId, purge_flag); 
      } 
     }); 
    } 
+0

'마지막으로 (함수() { 반환 defer.promise, }' '함수 삭제 '에서 복귀하지 않는다. –

답변

0

, return defer.promise