一尘不染

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

angularjs

我正在开发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)
    })
  }
};

如您所见,我在console.log中记录了名称,并在控制台中获得了正确的值。但是仅在我调用即使返回names变量的情况下getUser()得到的函数的情况下,它也可以undefined在这里使用。

我需要$scope那个变量。


阅读 1483

收藏
2020-07-04

共1个答案

一尘不染

getUser()没有返回任何东西。你需要从返回的承诺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(),但是如果您想使用最终结果,那么您还想更改使用从getUser获得的值的方式-
它返回一个Promise对象,而不是最终的结果之后,因此您的代码要then在解决承诺后调用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
   });
2020-07-04