i have authentication service broadcasts event when login successful. upon successful authentication need call authorization service retrieve claims. service have has login function return promise. upon successful login want call getclaims() return claims after successful http call.
in getclaims function when try access 'deferred' variable undefined.
essentially have function1 on service calls 3rd party service. 3rd party service broadcasts event upon success/failure. handle event in service. success handler should call function2 in service. want return promise function1 consumer of service can use .then chain successful login.
(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;})();