Tak, jest to obsługiwane bardzo elegancko przez AngularJS, ponieważ jego usługa jest zbudowana wokół PromiseAPI. Zasadniczo, połączenia z metodami $http
zwrócą obietnicę i można łatwo połączyć obietnice za pomocą metody then
. Oto przykład:
$http.get('http://host.com/first')
.then(function(result){
//post-process results and return
return myPostProcess1(result.data);
})
.then(function(resultOfPostProcessing){
return $http.get('http://host.com/second');
})
.then(function(result){
//post-process results of the second call and return
return myPostProcess2(result.data);
})
.then(function(result){
//do something where the last call finished
});
Można również połączyć obróbkę i następny $http
funkcji, jak również, to wszystko zależy od tego, kto jest zainteresowany w wynikach.
$http.get('http://host.com/first')
.then(function(result){
//post-process results and return promise from the next call
myPostProcess1(result.data);
return $http.get('http://host.com/second');
})
.then(function(secondCallResult){
//do something where the second (and the last) call finished
});
Dzięki Paweł, sprawdzę to. W tej chwili użyłem '$ q.all' i wydaje mi się, że robię to, co chcę. Ale spróbuję też tego. – Ketan
@Ketan 'q.all' i opisane tutaj rozwiązanie to dwie różne rzeczy. 'q.all' jest świetne, ale działa tylko w przypadku żądań równoległych, tzn. jeśli nie zależy Ci na ich zamówieniu, a jedno żądanie nie zależy od wyników innego. Na podstawie Twojego pytania zrozumiałem, że chcesz śledzić żądania, w których jedna prośba musi zostać zakończona, chcesz sprawdzić/przetworzyć wyniki, a dopiero potem wydać kolejną prośbę. –
Okazuje się, że w moim konkretnym problemie można uruchomić je równolegle, ale to, czego chciałem, to uruchomić kod, gdy wszystkie zostały ukończone. Jednak Twoja odpowiedź jest nadal cenna, ponieważ jestem pewien, że napotkam to wcześniej niż później. Przyjmuję twoją odpowiedź. – Ketan