AngularJs如何确保代码同步执行

时间:2015-06-29 12:17:39

标签: javascript angularjs

我在页面上有一个按钮,它在控制器中调用过程功能,但在我发布详细信息之前我需要获取 用户详细信息和userGroup详细信息,最后发布用户详细信息。

但是当我调试这个时,我可以看到我的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

        });
    };  

1 个答案:

答案 0 :(得分: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();
})