Sì, questo è gestito in modo molto elegante da AngularJS poiché il suo servizio $http
è costruito attorno a PromiseAPI. Fondamentalmente, le chiamate ai metodi $http
restituiscono una promessa e puoi concatenare molto facilmente le promesse utilizzando il metodo then
. Ecco un esempio:
$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
});
Si potrebbe anche combinare post-elaborazione e successiva funzione $http
così, tutto dipende da chi è interessato ai risultati.
$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
});
fonte
2013-04-29 17:45:17
Grazie Pawel, lo controllerò. In questo momento, ho usato '$ q.all' e sembra che stia facendo quello che voglio. Ma proverò anche questo. – Ketan
@Ketan 'q.all' e la soluzione qui descritta sono 2 cose diverse. 'q.all' è ottimo ma funziona solo per richieste parallele, cioè se non ti interessa il loro ordine e una richiesta non dipende dai risultati di un'altra. Dalla tua domanda ho capito che sei dopo aver incatenato le richieste, dove una richiesta deve terminare, vuoi ispezionare/elaborare i risultati e solo successivamente emettere un'altra richiesta. –
Risulta nel mio particolare problema che era corretto eseguirli in parallelo, ma quello che volevo veramente era eseguire un codice quando tutti erano stati eseguiti. Tuttavia, la tua risposta è ancora valida, perché sono certo che mi imbatterò in questa prima possibile. Accetterò la tua risposta. – Ketan