2016-06-20 1 views
1

Глядя, чтобы получить правильный синтаксис, чтобы сделать следующее:Угловые JS цепные два WebServices называет

1) empty object results = {} 
2) first webservice call finished = results.webservice1 = data; 
3) second webservice call finished = results.webservice2 = data; 
4) Complete 

У меня есть что-то вроде этого, но синтаксис не чувствует себя хорошо

function getClaimSummary(filter) { 
     let deferred = $q.defer(); 

     $http.post(configSettings.Api.GetClaimSummary, filter, { withCredentials : true }) 
      .success(function(data){ 
       deferred.resolve(data); 
      }) 
      .error(function(error){ 
       deferred.reject(error); 
      }); 

     return deferred.promise; 
    } 

    function getPolicySummary(filter) { 
     let deferred = $q.defer(); 

     $http.post(configSettings.Api.GetPolicySummary, filter, { withCredentials : true }) 
      .success(function(data){ 
       deferred.resolve(data); 
      }) 
      .error(function(error){ 
       deferred.reject(error); 
      }); 

     return deferred.promise; 
    } 

    function calculateAccumulations(filter){ 
     service.result = {}; 

     //Get Claims Summary 
     getClaimSummary(filter).then(function(data){ 
      service.result.claims = data; 
     }).then(getPolicySummary(filter).then(function(data){ 
      service.result.policy = data; 
      showAccumulations(); 
     })); 
    } 

ответ

2

$http сама уже возвращается обещание, поэтому нет необходимости создавать свои собственные, вы также можете обрабатывать обе обещания в одно и то же время, а не ждать друг друга так:

function getClaimSummary(filter) { 
    return $http.post(configSettings.Api.GetClaimSummary, filter, { withCredentials : true }); 
} 

function getPolicySummary(filter) { 
    return $http.post(configSettings.Api.GetPolicySummary, filter, { withCredentials : true }); 
} 

function calculateAccumulations(filter){ 
    service.result = {}; 

    //Get Claims Summary 
    $q.all({ 
     claims: getClaimSummary(filter), 
     policy: getPolicySummary(filter) 
    }).then(function (result) { 
     service.result = result; 
    }); 
} 

Вы можете даже сохранить некоторые повторяющийся код делает это так:

function fetchData(type, filter) { 
    return $http.post(configSettings.Api[type], filter, { withCredentials : true }); 
} 

function calculateAccumulations(filter){ 
    service.result = {}; 

    //Get Claims Summary 
    $q.all({ 
     claims: fetchData('GetClaimSummary', filter), 
     policy: getPolicySummary('GetPolicySummary', filter) 
    }).then(function (result) { 
     service.result = result; 
    }); 
} 

Более подробной информации о $q можно найти here.

+0

Спасибо, что отлично – StevieB

Смежные вопросы