Scott Plunkett Scott Plunkett - 4 months ago 12
AngularJS Question

Return Object in $rootScope Function (AngularJS)

I am trying to return an object from a $rootScope function called retrieveUser() in AngularJS. The object is returned. I have run console.log() on the response of the function ran when $http is successful. Here is my $rootScope function:

$rootScope.retrieveUser = function() {

var apiUrl = "http://104.251.218.29:8080";

if($cookies.get('tundraSessionString')) {

var cookie = $cookies.get('tundraSessionString');

$http({
method: "POST",
url: apiUrl + "/api/master/v1/auth/checkauth",
data: "sessionString=" + cookie,
headers: {
'Content-Type' : 'application/x-www-form-urlencoded;',
'Cache-Control': 'no-cache'
}
}).then(function mySuccess(response) {

if(response.data.event == "error") {

window.location = "/auth/logout";

} else {

return response.data;

}


})

} else {

window.location = "/auth/login";

}

};


With this method, I access it in my controller such as this (and console.log() just to test my work):

vm.user = $rootScope.retrieveUser();
console.log($rootScope.retrieveUser());


But, I have yet to get this to work. I have tried specifying specific objects in an array in my $rootScope function. I know it runs, because I have the $rootScope consoling something when it is run, and it shows a console.log() of the response of the $http request. It looks like this:

Object {event: "success", table: Object}
event:"success"
table:Object
__proto__:Object


Yet, when I console.log() the vm.user with the function $rootScope.retrieveUser(), even though the function is supposed to be returning the object, I simply receive "undefined".

I have been banging my head on this for days, read some articles on functions/objects and I still cannot figure this out. We're two days in.

Answer

try this:

        if($cookies.get('tundraSessionString')) {

            var cookie = $cookies.get('tundraSessionString');

            //return a promise
            return $http({
                method: "POST",
                url: apiUrl + "/api/master/v1/auth/checkauth",
                data: "sessionString=" + cookie,
                headers: {
                    'Content-Type' : 'application/x-www-form-urlencoded;',
                    'Cache-Control': 'no-cache'
                }
            }).then(function mySuccess(response) {

                if(response.data.event == "error") {

                    window.location = "/auth/logout";

                } 
                else {

                    return response.data;

                }


            })

        } 
        else {

            window.location = "/auth/login";

        }

and

$rootScope.retrieveUser().then(function(user){vm.user = user;})
Comments