AngularJS $http succès de rappel de données de retour
Bonjour à tous 🙂 Voici le problème. Je suis en train de faire angulaire application avec:
-
une usine pour l'accès à une api avec $http qui permet de récupérer un tableau d'objets à partir d'un serveur
getObjectsFromApi : function(){ return $http({ url: 'http://path/to/the/api/', method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', } }) },
-
et un service de calculer les données récupérées et de l'injecter à des contrôleurs de
this.getObjectsFromService = function(){ var objects = []; ObjectFactory.getObject() .success(function(data, status){ console.log("Successfully got objects !"); objects = data; }) .error(function(data, status){ console.log("Fail... :-("); }); return objects; };
Le problème est que quand je retourne les objets, il ne renvoie pas les données. Comment puis-je faire pour retourner $http rappel de données au sein de cette getObjectsFromService fonction ?
Merci de votre aide !
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser des promesses, quelque chose comme cela devrait faire l'affaire
Et maintenant vous pouvez utiliser cette fonction quelque part d'autre comme ceci:
Il n'y a pas d'autre moyen de retourner les objets, il n'est pas possible parce que $http est asynchrone. Vous devrez retravailler le reste du code et de l'adapter à ce
Cela va le faire pour toi
La variable req sera alors la promesse renvoyé de l'usine.
Modifier
Gardez à l'esprit que vos données ne seront pas des changements jusqu'à ce que la promesse est résolu, donc, si vous essayez à la console.log(objets de), avant, il sera vide.
La requête http est asynchrone, ce qui signifie qu'il termine après vous revenez
objects
. De retour de la promesse à la place:Puis
Votre code est asynchrone. Lorsque vous retournez des objets, vous retournez votre premier tableau vide. Vous ne pouvez pas retourner directement votre objet, mais au lieu de cela vous avez besoin de retourner une promesse (voir 3 possibilités ci-dessous)
Par la création d'une promesse
Vous pouvez utiliser promesse de chaînage (utiliser .alors, plutôt que de .succès et .d'erreur):
Remarque: lorsque vous utilisez ensuite avec succès et erreur rappels plutôt que de succès et d'erreurs, vous avez seulement 1 argument qui est l'objet de la réponse
Ou si vous n'avez pas de logique métier, ou aucune raison d'intervenir dans votre usine, il suffit de retourner votre $http appeler directement:
Angulaire $ressource
Usine
Service