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();
}]);
答案 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特性。