ich mit Angular des $http
Fragen zu erhalten, die ein Versprechen im Gegenzug erwartet, entweder success
oder error
:Wie kann ich eine Rückruffunktion zurückgeben?
Question.getQuestions().success(function (res) {
...
}).error(function (err) {});
In meiner Methode, ich brauche Token zu überprüfen, ob abgelaufen ist, wenn ja, zu aktualisieren, dann Machen Sie die Anfrage an /questions
und geben Sie das Versprechen zurück. Andernfalls machen nur die Anforderung an /questions
wie gewohnt:
getQuestions: function() {
// this is called by refreshToken but not returning the $http promise
var get = function() {
return $http({
method: 'GET',
url: url + ver + '/questions',
...
});
};
if (Auth.tokenIsExpired()) {
return Auth.refreshToken(get);
} else {
return get();
}
},
Die refreshToken andere $http
ist, die auf ein Versprechen beruht, dann ruft die get()
Rückruf.
Auth {...
refreshToken: function(callback) {
...
_this.getAuth(OAuth).success(function (access_obj) {
//set token
callback();
})...
Wo getAuth ist ein weiterer $http promise
:
getAuth: function(params) {
return $http({
method: 'POST',
url: url + '/oauth/access_token',
...
});
},
Alle diese Methoden aufgerufen werden wie erwartet, aber bin immer Fehler:
Cannot read property 'success' of undefined
Dies liegt daran, Auth.refreshToken(get)
nicht zurückkehrt der /questions $http
Anruf wie es sollte. Wie kann ich das Versprechen von diesem zurück zum ursprünglichen Question.getQuestions()
zurückgeben?
so was '_this.getAuth'? – zerkms
@zerkms siehe oben Bearbeiten – Growler
sollten Sie nicht then() anstelle von success() verwenden, und warum Sie nicht _this.getAuth (...) zurückgeben und callback() zurückgeben; – progysm