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
- 1. Wie warten Sie auf alle Versprechen, dann machen Sie eine Aktion?
- 2. Aktivieren Sie Boolean und geben Sie Text in Sicht und dann zurück zum Controller - MVC
- 3. JavaScript Versprechen dann() Bestellung
- 4. Machen Suchfeld GET Seite auf Geben Sie
- 5. Angular 2 dann versprechen
- 6. Machen Sie "!" und "nil" geben das gleiche Ergebnis?
- 7. Machen Sie jQuery aufgeschoben/Versprechen und AngularJS $ q Zurückgestellt/Versprechen kompatibel
- 8. Wie machen Sie Dinge nach dem geworfenen Wert?
- 9. Geben Sie Seite, die Sie in
- 10. Geben Sie eine Bestätigungsmeldung mit Schlüssel zurück und geben Sie
- 11. Warten Sie, bis die Animation beendet ist, und geben Sie dann
- 12. JS - dann und wartet auf ein Versprechen
- 13. Warten Sie, bis Funktion getan wird, geben dann Form
- 14. Ich brauche ein Skript, das eine Schaltfläche und geben Sie dann in sie drücken und klicken Sie dann auf einen anderen Knopf
- 15. Bluebird Versprechen - dann nach endlich
- 16. Seltsame Typdefinition Syntax in Golang (Name, geben Sie dann, dann Stringliteral)
- 17. Wie man Square Corner Dinge machen?
- 18. Geben Sie Benutzertext in. Bashrc
- 19. Gibt es einen Unterschied zwischen Versprechen, dann Versprechen und Versprechen. promise.then
- 20. Rückkehr von einem Versprechen dann()
- 21. Sortieren Sie eine Liste, geben Sie dann die Indizes der Elemente in ihrer ursprünglichen Reihenfolge
- 22. Pandas und SQL Alchemy: Geben Sie Spaltendatentypen
- 23. Hit verschiedene Regex-Muster und geben Sie dann unterschiedliche Gewicht in C#
- 24. Geben Sie ein Versprechen mit einem Modell und einem Service zurück
- 25. Verwenden Sie Versprechen und Service zusammen in Angular
- 26. Typoskript Syntax angular2 Versprechen dann Rückruf
- 27. Erstellen Sie ein leeres Versprechen
- 28. Javascript Versprechen: dann() sind nicht synchron
- 29. Visual Basic Datagridview Zelle Ereignis dann drücken Sie die Tastatur geben Sie
- 30. Geben Sie returnURL in QueryString
'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