2016-06-20 3 views
1

Suchen die richtige Syntax zu erhalten, Folgendes zu tun:Angular JS zwei webservices Verkettungs nennt

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

Ich habe so etwas wie dies aber Syntax fühlt sich nicht richtig

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(); 
     })); 
    } 

Antwort

2

$http sich bereits zurückkehrt ein Versprechen, so dass es keine Notwendigkeit gibt, Ihre eigenen zu erstellen, könnten Sie auch beide Versprechen zur gleichen Zeit statt aufeinander warten, wie folgt:

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; 
    }); 
} 

Sie könnten sogar einige doppelten Code speichern Sie es wie so tun:

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; 
    }); 
} 

Mehr Informationen über $qhere zu finden sind.

+0

Danke das ist perfekt – StevieB