我得到的服务首先需要检索一个accessstoken,然后是一个User对象。完成此操作后,需要采取进一步的UI操作。我遇到的问题是使用有效的Session.accesstoken调用login()。then(),但是Session.user是未解析的promise。所以我不能根据用户的信息(例如角色等)来做任何逻辑
以下代码:
在controllers.js中(单击表单凭据按钮时调用login())
.controller('LoginController',
function($scope, SessionService) {
$scope.credentials = {
username : '',
password : ''
};
$scope.login =
function() {
SessionService.login($scope.credentials).then(function() {
console.info("succesfully logged in as user " + JSON.stringify(Session));
// further UI actions..
});
};
})
在services.js
中.factory('SessionService',
function(User, Session, AuthorizationService) {
return {
login : function(credentials) {
return AuthorizationService.requestToken(credentials)
.then(function(token) {
console.info("Got token: " + token);
if (!!token) {
Session.create(token);
console.info("Fetching user...");
return User.get({
id : 'me'
});
} else {
throw (new Error("Could not log in"));
}
}).then(function(user) {
console.info("Got user: " + user);
if (!!user) {
Session.user = user;
} else {
throw (new Error("Could not fetch user"));
}
});
},
};
})
以下是控制台的输出:
答案 0 :(得分:1)
User
对象由$resource
创建,并非承诺;它是最终将用用户信息填充的实际对象,但在代码的这一点上它什么都不包含。
解决方案很简单:从第一个then
执行:
return User.get({...}).$promise;
下一个then
将按预期使用用户对象调用,但仅在实际获取数据时才会调用。