AngularJS $http Erfolg-callback-Daten zurück
Hallo an alle 🙂 Hier ist das problem. Ich mache eine Winkel-app mit:
-
einer Fabrik, um den Zugriff auf eine api, die mit $http, ruft ein array von Objekten von einem server
getObjectsFromApi : function(){ return $http({ url: 'http://path/to/the/api/', method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', } }) },
-
sowie ein service zur Berechnung abgerufenen Daten und injizieren es dem für die Verarbeitung Verantwortlichen
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; };
Das problem ist, dass wenn ich die Objekte zurückgeben, spielt es keine Daten zurückgegeben. Wie kann ich tun, um return $http-callback-Daten innerhalb dieser getObjectsFromService Funktion ?
Danke für die Hilfe !
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Versprechen, so etwas sollte den trick tun
Und jetzt Sie können diese Funktion nutzen, woanders wie diese:
Es gibt keinen anderen Weg, um die Gegenstände zurückgeben, es ist nicht möglich, da $http asynchron ist. Haben Sie zu überarbeiten, der rest des Codes und der Anpassung an diese
Wird dies tun, ist es für ya
Die variable req wird, dann werden die Versprechen wieder zurück geschickt aus der Fabrik.
Bearbeiten
Beachten Sie, dass Ihre Daten nicht verändert bis das Versprechen aufgelöst wird, so dass, wenn Sie versuchen zu trösten.log(Objekte), bevor dann, wird es leer sein.
Den http-request ist asynchron, was bedeutet, dass es abgeschlossen ist nach Sie zurück
objects
. Zurück das Versprechen statt:Dann
Dein code ist asynchron. Wenn Sie Objekte zurückgeben, Sie wieder Ihre ursprüngliche leeres array. Sie können nicht wieder direkt das Objekt, sondern Sie brauchen, um wieder ein Versprechen (siehe 3 Möglichkeiten unten)
Durch die Schaffung eines Versprechen
Können Sie Versprechen chaining (verwenden .dann lieber als .Erfolg und .Fehler):
Hinweis: bei der Verwendung dann mit success-und error-callbacks eher als Erfolg und Irrtum-Methoden, haben Sie nur 1 argument, das ist das response-Objekt
Oder wenn Sie keine business-Logik, oder keinen Grund zum eingreifen in Ihre Fabrik, schicken Sie einfach Ihre $http-Aufruf direkt:
Eckig $resource
Fabrik
Service