Rendite Versprechen Kantige service
Ich habe einen Dienst, der (wenn es alle gesagt und getan) aktualisiert einen Wert auf die Datenbank.
Möchte ich zum aktualisieren der Ansicht von scope basiert auf dem Ergebnis (Erfolg/scheitern), aber natürlich auch das http-Anforderung für den Dienst verwendet, ist asynchron, so dass der return-Wert ist nicht sofort verfügbar und kommt undefiniert in den controller.
Wenn ich den http-request im controller, würde ich ein update der Geltungsbereich innerhalb der callback-Funktion, aber da Im mit einem Dienst, der Bereich äääh... Umfang(?) nicht zur Verfügung stehen.
Im denken ist ein Versprechen, was ich brauche zurückkehren, aber vielleicht ist es etwas einfacher.
SERVICE
.service('doStuff',function($http){
this.update = function(data) {
$http.post('http://api.internet', data).then(function(res){
return(res.data.result);
});
}
})
CONTROLLLER
/* service is injected into controller etc. */
var result = doStuff.update(data);
p(result); //undefined (as expected)
Ich dachte mir, da ich der Rückkehr aus dem http-Rückruf, es würde warten, bis das Ergebnis verfügbar zu sein, vor der Rückgabe aber ich denke Im fehlt etwas.
- Ihre Methode
this.update
nicht wirklich etwas zurückzugeben. Sie brauchen, um es zu ändernreturn $http.post(..)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Linie, die Sie brauchen, um wieder die Abfrage selbst. Sieht aus wie
Nächsten Schritt müssen Sie sich aus dem Versprechen-Funktion.
Seit
$http
ist immer async, können Sie nicht zurück, nichts in der call-back-Funktion. Es ist so gut wie nicht wieder etwas.Was Sie tun müssen, ist, dass Sie brauchen, um die Rückkehr der
$http
Versprechen, und dann mit der callback-Funktionen im controller.Service:
Controller:
return
vor$http.post