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

IT技术 javascript angularjs angular-promise
2021-03-11 12:23:52

我正在开发 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个回答

getUser()没有返回任何东西。你需要从返回的PromiseSpotify.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得到解决时调用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
   });
对不起,我是新来的,它有效,但我得到一个以 $$state 开头的对象,我如何访问它包含的数据?
2021-04-23 12:23:52
我添加了一些代码来处理您从中获得的PromisegetUsers()- 我认为这比我之前在评论中链接的其他答案要清晰得多。
2021-04-24 12:23:52
所以里面的函数then将返回一个值,然后由getUser?
2021-04-25 12:23:52
@Melab 是的 -getUser()返回一个Promise。您可以在该thenPromise功能中访问其最终解析值
2021-05-02 12:23:52
你能帮我解决这个问题吗?
2021-05-13 12:23:52

如果你像那样使用它,你可以使用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();
不,你不能在没有异步的情况下使用等待,如果你尝试使用你会得到同样的错误。
2021-04-25 12:23:52
我们可以使用 await 而不在函数减速中添加 async 吗?
2021-05-12 12:23:52