2015-01-15 4 views
0

$ http 호출 (비동기식)이 포함 된 서비스를 두 번 호출하고 지연을 사용하여 범위 데이터를 한 번 설정하는 상황이 있습니다 두 호출을 모두 반환합니다. 이것은 잘 작동하지만, 이제는 두 호출이 모두 완료되면 (성공했거나 실패한 경우) 변수를 설정해야하며이 문제를 어떻게 해결할 것인지 확실하지 않습니다. 당신이 볼 수 있듯이, 내 두 요청이

//"use strict"; 

(function() { 
var friendsController = function($scope, $log, friendsService) 
{ 
    // prepare the $scope 
    $scope.friendsData = { 
     community: window.community, 
     userId: 'someuser', 
     friends: {}, 
     requests: {}, 
     requestsUtil : { 
      dataLoad : true, 
      dataSucc : false, 
      dataErr : false 
     }, 
     friendsUtil : { 
      dataLoad: true, 
      dataSucc: false, 
      dataErr: false 
     }, 
     dataLoad: true, 
     dataSucc: false, 
     dataLoadDone: false 
    }; 

    // util 
    var setStatus = function(stringType, load, succ, err) {// 
     $scope.friendsData[stringType].dataLoad = load; 
     $scope.friendsData[stringType].dataSucc = succ; 
     $scope.friendsData[stringType].dataErr = err; 
    } 

    // get initial request data 
    friendsService.getRequests(window.user.bpUser.display_name) 
     .then(
      // success 
      function(data) { 
       if(data.friendRequests.length) { 
        $scope.friendsData.requests = data; 
        setStatus("requestsUtil", false, true, false); 
       } else { 
        setStatus("requestsUtil", false, false, true); 
       } 

     }, 
      // error 
      function(data, status, headers, config) { 
       $log.log(data.error + ' ' + status); 
       setStatus("requestsUtil", false, false, true); 
     }); 

    // get initial friends data 
    friendsService.getFriends(window.user.bpUser.display_name) 
     .then(
      // success 
      function(data) { 
       if(data.friends.length) { 
        $scope.friendsData.friends = data; 
        setStatus("friendsUtil", false, true, false); 
       } else { 
        setStatus("friendsUtil", false, false, true); 
       } 

     }, 
      // error 
      function(data, status, headers, config) { 
       $log.log(data.error + ' ' + status); 
       setStatus("friendsUtil", false, false, true); 
       scope.friendsData.loadDone = true; 
     }); 

    $scope.friendsData.dataLoad = false; 
    $scope.friendsData.dataSucc = true; 
}; 

Profile.controller('profile.friendsController', ['$scope', '$log', 'friendsService', friendsController]); 
})(); 

:

friendsService.getRequests(window.user.bpUser.display_name) 
     .then(

과 :

friendsService.getFriends(window.user.bpUser.display_name) 
     .then(

가 어쨌든 나는 몇 가지 기능을 추가 할 수 있습니다 여기

내 코드입니다 이 두 호출이 모두 완료되었는지 확인하고, 그렇다면 범위에서 이것을 캡처 할 변수를 설정 하시겠습니까? 감사

답변

0

당신은 $q.all을 사용할 수 있습니다 당신은 $ q.all() 메소드

var promises = []; 
promises.push(friendsService.getRequests(window.user.bpUser.display_name)); 
promises.push(friendsService.getFriends(window.user.bpUser.display_name)); 
$q.all(promises).then(function (results) { 
    doSomethingOnThem(results[0], results[1]); 
}); 
0

를 사용할 수 있습니다. 이 같은 것 (오류 부분에 대해 너무 확신하지 못합니다) :

$q.all([friendsService.getRequests(window.user.bpUser.display_name), 
     friendsService.getFriends(window.user.bpUser.display_name)]) 
.then(
    // success 
    function(data) { 
     if(data[0].friendRequests.length) { 
     $scope.friendsData.requests = data[0]; 
     setStatus("requestsUtil", false, true, false); 
     } else { 
     setStatus("requestsUtil", false, false, true); 
     } 

     if(data[1].friends.length) { 
     $scope.friendsData.friends = data; 
     setStatus("friendsUtil", false, true, false); 
     } else { 
     setStatus("friendsUtil", false, false, true); 
     } 
    }, 
    // error 
    function(error) { 
     $log.log(error + ' ' + status); 
     setStatus("requestsUtil", false, false, true); 
     setStatus("friendsUtil", false, false, true); 
    }); 
관련 문제