web-dev-qa-db-fra.com

Comment puis-je accéder à une variable en dehors d'une méthode de promesse `.then`?

Je travaille sur une application Spotify. Je peux me connecter et obtenir mon jeton. Mon problème est que je ne peux pas accéder à une variable en dehors de la méthode. Dans ce cas, "getCurrentUser"

Ceci est ma méthode:

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)
    })
  }
};

Comme vous pouvez le voir, j'ai consigné le nom console.log et j'ai la bonne valeur dans la console. Mais ne fonctionne que si j'appelle la fonction getUser(). Je reçois undefined même avec un retour de la variable de noms.

J'ai besoin de $scope cette variable.

5
Rodolfo R

getUser() ne renvoie rien. Vous devez renvoyer la promesse à partir de Spotify.getCurrentUser(), puis lorsque vous renvoyez names dans que il est renvoyé par la fonction externe.

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;
        })
    }
}

Les réponses ci-dessus expliquaient pourquoi vous obteniez undefined lorsque vous appelez getUser(), mais si vous souhaitez utiliser le résultat final, vous souhaitez également modifier la façon dont vous utilisez la valeur que vous obtenez de getUser - elle renvoie un objet de promesse, et non le résultat final. êtes après, donc votre code veut appeler la méthode then de la promesse lorsque la promesse est résolue:

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
   });
5
Danny

Si vous l'utilisez comme ça, vous pouvez utiliser le wait call 

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;
        });
    }
}

const names = await getUser();
0
Jorge Monroy