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();
}]);
问问题
1894 次
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 回答