我正在使用Spotify应用。我能够登录并获取我的令牌。我的问题是我无法访问方法之外的变量。在这种情况下"getCurrentUser"
这是我的方法:
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)
})
}
};
正如您所见,我在控制台上记录了该名称,并且我在控制台中获得了正确的值。但只有在我调用函数getUser()
时我才能使用undefined
,即使返回了名称变量。
我需要$scope
该变量。
答案 0 :(得分:5)
Spotify.getCurrentUser()
没有返回任何内容。您需要从names
返回承诺,然后当您在中返回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;
})
}
}
时,它会被外部函数返回。
undefined
上面回答了为什么在调用getUser()
时获得then
的原因,但如果您想使用最终结果,您还想更改使用getUser获取的值的方式 - 它返回一个promise对象,而不是你所追求的最终结果,因此你的代码想要在promise得到解决时调用promise的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
});
方法:
{{1}}
答案 1 :(得分:0)
如果您这样使用它,可以使用 await 呼叫
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();