2016-05-19 17 views
0

Ich habe eine eckige Versprechen, die durch den Aufruf einer benutzerdefinierten API aus $ Ressource generiert wird, die ein Array von IDs zurückgibt. Ich muss eine andere $ Ressourcen-API für jede ID aufrufen und sobald alle Details geladen sind, möchte ich den ursprünglichen Aufruf fortsetzen.

MyFactory.loadChildren(id).then(saveSuccess, saveFail); 
MyFactory.loadChildren = function(id) { 
     return MyResource.children({ 
     id: id 
     }).$promise 

     .then(function(response) { 
      _.each(response, function(c) { 
      MyResource.details({id:c.id}).$promise.then(function(child){ 
      //do something with the child 



      },function(){ 

      }) 
      }); 
      return //all the children details; 
     }); 
    }; 

Ich möchte die saveSuccess ausgeführt werden, sobald alle untergeordneten Details geladen sind. Wie kann ich das machen?

Antwort

1

Sie müssen $ q.all verwenden. Also wird Ihr _each ein Array von Versprechen füllen und Sie werden $ q.all (thatArray) aufrufen. Die Funktion in der $ q.all (thatArray) wird dann ein Array der Ergebnisse all dieser Aufrufe erhalten und Sie können eine then() tun, um den letzten Aufruf zu tun. https://www.jonathanfielding.com/combining-promises-angular/

+0

Vielen Dank :) Ich zwickte Code ein wenig – Neo

Verwandte Themen