如何访问promise` .then`方法之外的变量?

时间:2017-11-29 18:55:24

标签: javascript angularjs angular-promise

我正在使用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该变量。

2 个答案:

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