javascript - ¿Cómo puedo acceder a una variable fuera de un método prometedor `.then`?




angularjs angular-promise (2)

Si lo usa así, puede usar la llamada en espera

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

Estoy trabajando en una aplicación de Spotify. Puedo iniciar sesión y obtener mi token. Mi problema es que no puedo acceder a una variable fuera del método. En este caso "getCurrentUser"

Este es mi método:

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

Como puede ver, Console.logged el nombre y obtengo el valor correcto en la consola. Pero solo funciona allí si llamo a la función getUser() Me getUser() undefined incluso con un retorno de la variable de nombres.

Necesito $scope esa variable.


getUser() no devuelve nada. Spotify.getCurrentUser() devolver la promesa desde Spotify.getCurrentUser() , y luego, cuando devuelve names dentro de ella, la función externa la devuelve.

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

Lo anterior respondió por qué estaba undefined al llamar a getUser() , pero si desea trabajar con el resultado final, también desea cambiar cómo está utilizando el valor que obtiene de getUser: devuelve un objeto de promesa, no el final resultado que está buscando, por lo que su código quiere llamar al método de la promesa cuando se resuelva la promesa:

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




angular-promise