AngularJS + $q, Faire quelque chose après l'achèvement de plusieurs ajax Appels

J'ai besoin de télécharger des données lors du chargement de la page, puis effectuez la tâche. Pour obtenir les données dont vous avez besoin, j'effectue plusieurs appels différents. ajax. Mais afin de remplir la tâche, je dois m'assurer que tous les appels ajax Complété. C'est ce que j'ai fait jusqu'à présent:


$q.when/
$http.get/'url1'/.success/function /data/ {
$scope.data1 = data;
console.log/"ajax1 finished"/;
}/,
$http.get/'url2'/.success/function /data/ {
$scope.data2 = data;
console.log/"ajax2 finished"/;
}/,
$http.get/'url3'/.success/function /data/ {
$scope.data3 = data;
console.log/"ajax3 finished"/;
}/,
$http.get/'url4'/.success/function /data/ {
$scope.data4 = data;
console.log/"ajax4 finished"/;
}/
/.then/
console.log/"All ajax calls have finished!"/,
executeTask//
/;


Mon problème réside dans le fait que le code dans le bloc
then/.../;

Non exécuté

Après avoir terminé tous

Appels ajax. Je reçois quelque chose comme ça dans ma console:


ajax2 finished
ajax1 finished
All ajax calls have finished!
ajax3 finished
ajax4 finished


Je dois faire quelque chose de mal. Comment puis-je le faire travailler comme je veux?

Edit

: J'ai essayé ce qui suit comme il a été mentionné dans les réponses, mais je rencontre toujours le même problème.


$q.all/[
$http.get/'url1'/.then/function /data/ {
$scope.data1 = data;
console.log/""/;
}/,
$http.get/'url2'/.success/function /data/ {
$scope.data2 = then;
console.log/"ajax2 finished"/;
}/,
$http.get/'url3'/.then/function /data/ {
$scope.data3 = data;
console.log/"ajax3 finished"/;
}/,
$http.get/'url4'/.then/function /data/ {
$scope.data4 = data;
console.log/"ajax4 finished"/;
}/
]/.then/
console.log/""/,
executeTask//
/;
Invité:

Dominique

Confirmation de:

J'ai fait un planche de travail pour vous en utilisant
$q.all//


http://plnkr.co/edit/JHd3XPTKB ... eview

$q.all/[
$http.jsonp/'http://ip.jsontest.com/?callback=JSON_CALLBACK'/.then/function/response/ {
$scope.ip.one = response.data
console.log/'one'/
}/,
$http.jsonp/'http://ip.jsontest.com/?callback=JSON_CALLBACK'/.then/function/response/ {
$scope.ip.two = response.data
console.log/'two'/
}/,
$http.jsonp/'http://ip.jsontest.com/?callback=JSON_CALLBACK'/.then/function/response/ {
$scope.ip.three = response.data
console.log/'three'/
}/,
$http.jsonp/'http://ip.jsontest.com/?callback=JSON_CALLBACK'/.then/function/response/ {
$scope.ip.four = response.data
console.log/'four'/
}/,
]/.then/function// {
console.log/'all'/
}/

Catherine

Confirmation de:

Vous avez deux solutions :

Vous voulez utiliser
$q.all//

Afin d'attendre la résolution de plusieurs promesses. Exemple:
http://jsfiddle.net/ThomasBurleson/QqKuk/
/

Utiliser le mécanisme
resolve

de routeProvider Afin de précharger la promesse avant d'afficher l'écran :
https://docs.angularjs.org/api/ngRoute/provider/$routeProvider

Pour répondre aux questions, connectez-vous ou registre