javascript angularjs angular-promise

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