我是新来的angularJs,我试图在我的应用程序中实现登录/注销。我正确使用诺言吗?
我有记录用户在AuthService,并且其写入验证令牌到本地存储一个SessionService(我使用JWT)
这里AuthService:
'use strict';
angular.module('App')
.factory('AuthService', ['ApiService', 'SessionService', '$q', '$timeout', 'jwtHelper', function (ApiService, SessionService, $q, $timeout, jwtHelper) {
// inherit
var service = Object.create(ApiService);
service.login = login;
service.logout = logout;
service.check = check;
service.user = user;
return service;
function login(credentials) {
return service.form('user.login', credentials)
.then(function success(response) {
SessionService.setToken(response.token);
return response;
});
}
function logout() {
// here we use a promise so it's easier to handle
// logout in the controller by chaining methods
var d = $q.defer();
$timeout(function() {
SessionService.setToken();
d.resolve();
}, 0);
return d.promise;
}
function check() {
var token = SessionService.getToken();
return !!token && !jwtHelper.isTokenExpired(token);
}
function user() {
return service.call('user', {cache: true});
}
}]);
我面临的问题它在注销方法中。我没有服务器调用来完成,只是清除本地存储和用户将被注销,但我想用承诺来处理这个所以在控制,我可以做到以下几点:
function logout() {
AuthService.logout().then(function success() {
$state.go('login');
});
}
这是一个实现这个好方法?
似乎是正确的,你有控制台上的任何错误?问题是什么? – 2015-02-23 12:11:33
我没有错误,只是询问我自己,如果这是以正确的方式处理这个问题的正确方法 – kitensei 2015-02-23 12:30:21
无关:我会建议使用组合而不是继承:http://en.wikipedia.org/wiki/Composition_over_inheritance – Martin 2015-02-23 12:41:28