How can I access a variable outside a promise `.then` method?

Question

I'm working on a Spotify app. I'm able to login and get my token. My problem is I cannot access a variable outside the method. In this case "getCurrentUser"

This is my method:

function getUser() {
  if ($localStorage.token == undefined) {
    throw alert("Not logged in");
  } else {
    Spotify.getCurrentUser().then(function(data) {
      var names = JSON.stringify(data.data.display_name);
      console.log(names)
    })
  }
};

As you can see I console.logged the name and I do get the right value in the console. But only works there if I call the function getUser() I get undefined even with a return of the names variable.

I need to $scope that variable.


Show source
| javascript   | angularjs   | angular-promise   2017-11-29 19:11 1 Answers

Answers to How can I access a variable outside a promise `.then` method? ( 1 )

  1. 2017-11-29 20:11

    getUser() is not returning anything. You need to return the promise from the Spotify.getCurrentUser(), and then when you return names within that it is returned by the outer function.

    function getUser() {
    
        if ( $localStorage.token == undefined) {
            throw alert("Not logged in");
        }
        else {
            return Spotify.getCurrentUser().then(function(data) {
                var names = JSON.stringify(data.data.display_name);
                console.log(names)
                return names;
            })
        }
    }
    

    The above answered why you were getting undefined when calling getUser(), but if you want to work with the end result you also want to change how you're using the value you get from getUser - it returns a promise object, not the end result you're after, so your code wants to call the promise's then method when the promise gets resolved:

    getUser()                        // this returns a promise...
       .then(function(names) {       // `names` is the value resolved by the promise...
          $scope.names = names;      // and you can now add it to your $scope
       });
    

Leave a reply to - How can I access a variable outside a promise `.then` method?

◀ Go back