2016-04-15 7 views
0

Ich habe mehrere gegenseitige unabhängige $http Anrufe, die vorgenommen werden müssen.

angular.forEach(carrierDetails, function(carrierDetail) { 
    (function(carrierId) { 
     CarrierService.getContact(carrierId).then(function(response) { 
      scope.contact[carrierId.toString()] = response.data.carrierOwners; 
     }); 
    })(carrierDetail.carrierId); 
}); 

$q.all() funktioniert nicht, weil in $q.all(), jeder Anruf fehlgeschlagen in allen gescheiterten Anrufe führen. In meinem Fall sind alle Anrufe gegenseitig unabhängig. Jede Anrufantwortdaten werden in scope.contact[] geschoben. Wie kann ich das machen? Vielen Dank!

+0

Nun, wenn Sie die Anforderungen in dieser Funktion nicht senden möchten, dann nicht, und verschieben Sie diesen Code an die Funktion, die die Anforderungen senden soll. Es gibt kein "Initialisieren eines Anrufs". –

+0

@JBNizet Yup, das kann ich definitiv tun. Ich bin nur neugierig, ob es eine Möglichkeit gibt, '$ q.all()' zu benutzen, um dies zu tun. – NMSL

+0

Ah. Das war nicht wirklich klar aus deiner Frage. J.C.'s Antwort bietet den Weg, dies zu tun. –

Antwort

1

Um hierfür $q.all() zu verwenden, behandeln Sie die fehlgeschlagenen Anrufe mit einem Haken bei jedem Anruf. Lösen Sie dann das Versprechen.

var promises = []; 

promises.push(doSomethingAsynchronous() 
    .then(function (response) { 
     return {response: response}; 
    }) 
    .catch(function (response) { 
     return {failed: true, response: response}; 
    }) 
); 

$q.all(promises).then(doSomething); 

Jetzt sind alle Versprechen zu lösen und Sie können überprüfen, welche fehlgeschlagen sind.

+0

Danke! Ich werde es versuchen. Wenn es funktioniert, werde ich zurückkommen, um dies als die Antwort zu markieren. Danke noch einmal! – NMSL