call on function在第一次调用时返回undefined

时间:2017-07-08 21:22:54

标签: angularjs

在我的控制器中,我在我的服务中调用此功能。 idservice.getid() 我正在使用console.log(idservice.getid())

将其打印到控制台进行测试

并且它第一次返回undefined,但之后如果再次调用它则返回值。

我知道这是一个异步问题,但我不确定如何使这项工作。

我的服务如下:

function idservice (userauth) {

 var id;

  this.getid = function() {
    userauth.currentUser().then(function(user) {
      id = user.id;
    });

    return id
  }
}

我怎样才能使它在第一次调用时不返回undefined?这是一个异步问题吗?

2 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为你在进行http调用和响应('user.id')的内部userauth currentUser()方法尚不可用。您可以在getid()方法&中返回userauth.currentUser()调用。也会在其成功回调中返回id。所以你的服务方法应该是

function idservice (userauth) {

 var id;

  this.getid = function() {
    return userauth.currentUser().then(function(user) {
              id = user.id;
              return id;
            });

  }
}

在控制器内你应该像

一样处理它
idservice.getid().then(function(response){
  $scope.id  = response;
});

以下是您的要求的小例子:https://plnkr.co/edit/bEjR9e179aRPfJiaQpei?p=preview

答案 1 :(得分:0)

我今天遇到了这个问题,好像如果你从服务器请求一些数据并将它分配给一个变量然后你尝试打印它,它会在第一次调用时显示未定义,我认为这不是什么它应该发生,因为您在获得信息后尝试打印它,但无论如何。

我通过删除该变量来修复它,只是获取数据然后打印出来。

我认为这将解决您的问题(OP 上次登录是在 2 年前,但也许它会帮助遇到此问题但没有找到有用答案的其他人?)

function idservice (userauth) {

  this.getid = function() {
    return userauth.currentUser().then(function(user) {
              return user.id;
            });

  }
}

这将按原样返回 user.id,它不会将其存储在变量中,您希望将其存储在变量中吗?存储它,但不要打印该变量,如下所示:

function idservice (userauth) {

 var id;

  this.getid = function() {
    return userauth.currentUser().then(function(user) {
              id = user.id;
              return user.id;
            });

  }
}

这对我有用(或者至少它背后的逻辑有效)。