AngularJS + q$, Faire quelque chose après de multiples appels ajax ont fini

J'ai besoin de charger des données sur le chargement de la page et ensuite faire exécuter une tâche. afin d'obtenir les données que je veux, j'ai exécuter plusieurs différents appels ajax. Mais, pour l'exécution de la tâche, j'ai besoin de tous de s'assurer que tous les appels ajax avez terminé. Voici 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 est que le code dans le bloc then(...); n'est pas exécutée après tout de l'appel ajax avez terminé. Je reçois quelque chose comme cela dans ma console:

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

Je dois être en train de faire quelque chose de mal. Comment puis-je le faire fonctionner comme je veux?


Modifier: j'ai essayé ce qui suit, comme il a été mentionné dans les réponses, mais j'ai toujours face au 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()
);
Je crois que $q.all doit accepter un tableau de promesses
essayé aussi et ça ne fonctionne pas.
Vous avez encore une réussite appel dans votre post édité.

OriginalL'auteur Christos Baziotis | 2014-07-31