angular – access aux données de plusieurs appels http – comment résoudre les promesses

Je suis bloqué sur quelque chose qui, je pense, devrait être simple. Je dois prendre des données de trois différents appels ajax, combiner et traiter les trois, et afficher le tableau résultant à l’utilisateur.

Dans sa forme la plus simple, mon code ressemble à ceci:

function giftControler ($scope, $http) { var names = $http.get("names.json"), naughty = $http.get("naughty.json"), nice = $http.get("nice.json"); 

Je comprends que mes variables sont affectées à des promesses, et non à des résultats réels, et que la requête http a été transmise à la file d’événements. Si je les suis avec des instructions exécutables, ces variables seront indéfinies. Je ne comprends pas comment attendre que ces promesses soient résolues pour continuer à les traiter.

Ce que je voudrais faire, c’est append immédiatement le code:

  for (var i=0; i<names.length; i++){ for (var j=0; j<nice.length; j++){ if (names[i] === nice[j]){ names[i] = names[i] + "--Yay!!"; }; }; }; $scope.kids = names; 

Le problème est que je ne peux pas simplement travailler sur les promesses comme si elles étaient résolues. Javascript va les voir pour les déclarations juste après les appels http et essayer de les exécuter immédiatement, même si les promesses n’ont pas été résolues.

Là où je suis bloqué, c’est que l’ api $ http me donne un object prometteur avec trois fonctions: error , success et then . Je ne sais pas quoi faire avec cela dans ce cas. J’ai besoin d’une fonction unique de succès pour les trois. J’ai besoin des trois pour résoudre, puis traiter les données dans chacun, puis atsortingbuer le résultat à un modèle angular.

Je suis sûr que je manque quelque chose d’évident, mais est-ce que quelqu’un a une suggestion? Dans mon vrai travail, plusieurs appels ajax ont plusieurs sources de données et beaucoup de traitement (en comparant les valeurs, en sortingant, en concaténant, etc.) pour obtenir une bonne collecte de données, mais je ne peux pas résoudre ce problème.

Merci,

Vous pouvez utiliser la fonction $ q “all”:

 function giftControler ($scope, $http, $q) { var names = $http.get("names.json"), naughty = $http.get("naughty.json"), nice = $http.get("nice.json"); $q.all([names, naughty,nice]).then(function(arrayOfResults) { ... This callback would be called when all promised would be resolved }); 

Cette façon de faire est un peu plus propre.

Voici un lien vers la documentation: http://docs.angularjs.org/api/ng.$q