我有一个身份验证服务,在登录成功时广播一个事件。验证成功后,我需要调用授权服务来检索声明。我有的服务有一个登录功能,我想返回一个承诺。成功登录后,我想调用getclaims(),它将在成功进行http调用后返回声明。
在我的getclaims函数中,当我尝试访问' deferred'变量我得到一个未定义的。
基本上我的服务上有一个function1,它调用第三方服务。此第三方服务在成功/失败时广播事件。我在服务中处理这个事件。我的成功处理程序应该在我的服务中调用function2。我想要做的是从我的function1返回一个promise,其中我的服务的使用者可以使用.then链接成功的登录。
(function () {
'use strict';
var factoryName = 'authService';
var dependencies = ['$http', 'configSettingService', '$rootScope', '$log', '$q'];
function secFactory($http, configSettingService, $rootScope, adalAuthenticationService, $log, $q) {
var deferred;
function getclaims() {
$http.get("someurl")
.success(function (data, status, headers, config) {
deferred.then(function success(data) {
$rootScope.$broadcast('secService:loginSuccess');
});
}).
error(function (data, status, headers, config) {
$log.debug('login failure');
$rootScope.$broadcast('secService:loginFailure');
});
}
function login() {
adalAuthenticationService.login();
deferred = $q.defer();
return deferred.promise;
}
$rootScope.$on('adal:loginSuccess', function (ev, user) {
console.log('login-success');
getclaims();
});
var service = {
login: login,
logout: logout,
};
return service;
}
var app = angular.module('CoreService');
app.factory(factoryName, secFactory);
secFactory.$inject = dependencies;})();