当前位置: 首页 > 面试题库 >

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

元叶秋
2023-03-14
问题内容

我正在开发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那个变量。


问题答案:

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


 类似资料:
  • 我有一个对象类,其中有几个字段和方法,我可以在when子句中成功访问这些字段和方法: 这类似于我的口水规则的结构: IntelliJ立即抱怨说它无法解析符号$对象。仅当我执行以下操作时,该变量似乎才可访问,但无法从包装器上下文外部访问getObject()方法。 在使用drools框架时,处理变量的正确方法是什么?是否可以在包装器外部声明变量,然后在包装器内部更改其值? 上面代码工作的项目中还有其

  • 问题内容: 我试图更新类“ var CurrentStatus:status!”内的变量,状态是一个枚举。我有一个firebase函数,它将更新变量。变量在firebase函数内部获取更新,但不会在firebase函数外部更新变量 问题答案: 同意杰伊的评论。您无法返回那样的状态,因为Firebases异步工作…我要做的是添加一个闭包参数,该参数在完成时执行,如下所示: class signUpC

  • 我试图理解promise、回调等在node.js中是如何工作的,特别是在访问函数之外的值的情况下。我花了一些时间在这里浏览答案如何从异步调用返回响应?在这里调用条纹API等待,但我尝试的每一个变化,我总是以'订阅'函数之外未定义结束。 谢啦

  • 是否可以从一个地方访问不同应用。属性的环境变量。实际上,我们正在构建这个软件,我们有不同的应用。不同项目的属性,如用户资产。因此,是否有可能将所有环境变量放在一个外部位置。如果是,将如何访问?

  • 我正在尝试将Netty(版本3.6.1.final)集成到我们当前的系统中,这样我就可以替换当前的NIO代码。 在我的Netty business logic处理程序的messageReceed()方法中,我将向总线添加一个输入请求。我将传递的一件事是Netty事件消息中的数据。 我认为应该在这个InputEvent中传递ChannelHandlerContext以及接收的数据/消息。以便最终在处