AngularJs:我可以承诺跨越多个功能

时间:2015-04-28 03:43:47

标签: javascript angularjs promise angular-promise

我有一个身份验证服务,在登录成功时广播一个事件。验证成功后,我需要调用授权服务来检索声明。我有的服务有一个登录功能,我想返回一个承诺。成功登录后,我想调用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;})();

0 个答案:

没有答案