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が2番目の関数よりも時間がかかる場合があることを意味します。そのため、場合によって$scope.attributeTypes=response.data;は後で呼び出されます。$scope.attribute=response.data;

これは Angular 固有のものではなく、JavaScript 固有のものです。

于 2015-09-24T11:38:47.297 に答える