角度JS控制器中的函数调用以随机顺序执行

时间:2015-09-24 11:32:39

标签: angularjs angular-controller

app.controller('attributeFormCtrl', ['$scope', '$route', '$log', '$modalInstance', 'attributeService', function($scope, $route, $log, $modalInstance, attributeService) {

    $scope.someMethod = function(){
        attributeService.getAllAttributeTypes().then(function(response){
            $scope.attributeTypes=response.data;
            }, function(error){
                // some error occurred
        });

        attributeService.getAttributeById($scope.attributeId).then(function(response){
            $scope.attribute=response.data;
        },function(error) {
            // error occurred.
        });
    };

    $scope.cancel = function() {
          $modalInstance.close();
    };

    $scope.someMethod();
}]);

2 个答案:

答案 0 :(得分:2)

您正在使用返回promise的异步方法。正如你所发现的那样,根据很多因素,人们可能会先完成另一个因素。

如果你需要一个在另一个之前执行,你可以先调用另一个,然后在回调函数中调用另一个,如下:

$scope.someMethod = function(){
    attributeService.getAllAttributeTypes().then(function(response){
        $scope.attributeTypes=response.data;

        attributeService.getAttributeById($scope.attributeId).then(function(response){
            $scope.attribute=response.data;
        },function(error) {
            // error occurred.
        });
    }, function(error){
        // some error occurred
    });
};

这样你就可以确定首先完成哪一个。

答案 1 :(得分:1)

JavaScript中没有随机。

在您的情况下,首先调用getAllAttributeTypes函数,然后调用getAttributeById,但是.then()表示存在回调,函数getAllAttributeTypes有时会花费更多时间第二个,这就是为什么在$scope.attributeTypes=response.data;之后调用$scope.attribute=response.data;的原因。

这不是Angular特异性,而是JavaScript特性。