2015-06-29 60 views
1

我有一个页面上的按钮,调用控制器内的过程函数,但在我发布细节之前,我需要获取 用户详细信息和userGroup详细信息,并最终发布用户详细信息。AngularJs如何确保代码同步执行

但是,当我调试这个我可以看到我的populateUserGroups函数被调用,但没有得到详细信息的updateUser函数被调用,因此发布的数据没有userGroup数据。

看来populateUserGroups功能异步调用,我怎么能确保当用户点击Process按钮,第一的getData被调用,然后 populateUserGroups被称为和$ scope.user.userGroups填充用返回的数据最后updateUser被调用?

$scope.process = function() { 
     myservice.getData($scope.userId).success(function (data) { 

       $scope.user = data.value; 
       $scope.user.userGroups = {}; 

       $scope.populateUserGroups(); 
       $scope.updateUser(); 

     }); 
    }; 

    $scope.populateUserGroups = function() { 
     myservice.getUserGroups($scope.userId).success(function (groupData) { 
      $scope.user.userGroups = groupData; 
     }); 
    }; 

    $scope.updateUser = function() { 
     myservice.updateUser($scope.user).success(function() { 

      // do stuff 

     }); 
    }; 
+0

调用第一功能的回调的第二个功能? – JJJ

+1

使用承诺理想地返回承诺的服务。请参阅$ q – Sam

+0

使用异步,https://www.npmjs.com/package/async –

回答

1

使用$ q.all

$q.all([ 
    myservice.getData($scope.userId), 
    myservice.getUserGroups($scope.userId) 
]).then(function(resps){ 
    $scope.user = resps[0].value; 
    $scope.user.userGroups = resps[1].data; 

    $scope.populateUserGroups(); 
    $scope.updateUser(); 
})