angularjs应用程序中的异步功能

时间:2016-12-04 20:30:52

标签: javascript angularjs

我正在编写一个返回函数但该函数没有返回值的服务。这是代码:

function getUser() {
    var Users = $resource('/api/users',{},{query: {method: 'get', isArray: true}});
    return Users.query({username:localStorage.getItem("token")}).$promise
}

function userrole() {
    var userrole='';

    var tmp=getUser();
    tmp.then(function(user){
        var userrole= user[0].role;
        console.log('The role is '+user[0].role);
        userrole=user[0].role;
        return userrole;
    });
    console.log('@ the end of userrole');
}

不返回的功能是userrole。我相信这是因为异步问题。我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

不确定你想要实现什么但只是回归 return tmp.then(...然后您就可以从其他地方拨打userrole().then((role) => ... )了。除了那个修复你的缩进。

答案 1 :(得分:1)

如果您在AngularJS(以及所有Javascript)中使用异步方法,则需要始终在上述函数中使用它。

例如:

function getUser() {
  var token = localStorage.getItem('token');

  var Users = $resource('/api/users', {}, {
    query: {method: 'get', isArray: true}
  });


  return Users.query({username: token}).$promise;
}

function getUserRole() {
  return $q(function(resolve, reject) {
    getUser()
      .then(function(user){
        resolve(user[0].role);
      })
      .catch(reject);
  });
}

getUserRole().then(function (userRole) {
  console.log('The role is ' + userRole);
});