2
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();
}]);
4

2 回答 2

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
    });
};

这样,您将始终确定哪个先完成。

于 2015-09-24T11:38:41.237 回答
1

JavaScript 中没有随机性。

在你的情况下,getAllAttributeTypes首先调用函数,然后getAttributeById,但是,这.then()意味着有一个回调,函数getAllAttributeTypes有时会比第二个需要更多的时间,这就是为什么在某些情况下$scope.attributeTypes=response.data;被调用的原因。$scope.attribute=response.data;

这不是 Angular 的特殊性,而是 JavaScript 的特殊性。

于 2015-09-24T11:38:47.297 回答