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