Ich möchte, dass dies ein Versprechen, hier ist es der Fall, aber es ist der $ http Erfolg Versprechen. Wie kann ich eine Zusage zurückgeben, wenn die Änderungen innerhalb der then() abgeschlossen sind?
Antwort
Sind gerade current_user
in then()
und es wird als Argument der nächsten then()
in der Kette
initUserProfile: function() {
return $http.get('myapi/user/profil').
then(function(response) {
current_user = response.data;
if (current_user.profilpicture) {
current_user.profilpicture = $rootScope.baseURL + "/images/users/" + current_user.username + "/" + current_user.profilpicture;
}
return current_user;
}).catch(function(err) {
// log error
});
};
In Controller verfügbar sein:
myService.initUserProfile().then(function(current_user){
$scope.user = current_user;
})
initUserProfile: function()
{
var defer=$q.defer();
$http.get('myapi/user/profil').
then(function (response) {
current_user = response.data;
if (current_user.profilpicture)
{
current_user.profilpicture = $rootScope.baseURL + "/images/students/" + current_user.username + "/" + current_user.profilpicture;
//here resolve
defer.resolve();
}else{
defer.reject();
}
}, function (err) {
// log error
defer.reject();
});
//retun promise
return defer.promise;
};
Dies ist ein Anti-Muster ... keine Notwendigkeit für $ q hier – charlietfl
Frage ist, wie Versprechen zurückzugeben, wenn der Code dann abgeschlossen ist - so ist dies die Antwort. Warum Anti-Muster, wenn wir nach einigen asynchronen Code Methode gelöst werden müssen. –
weil '$ http' bereits ein Versprechen zurückgibt ... http://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it – charlietfl
'initUserProfile' schon wieder ein Versprechen. Also, was ist dein Problem? – dfsq
Sie haben ein 'in dieser Zeile vergessen: return $ http.get (****' *** myapi/user/profil '). – 01axel01christian
Wie auch immer, Rückkehr aus dem Block dann, wenn Sie Versprechen versprechen wollen. – dfsq