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
が2番目の関数よりも時間がかかる場合があることを意味します。そのため、場合によって$scope.attributeTypes=response.data;
は後で呼び出されます。$scope.attribute=response.data;
これは Angular 固有のものではなく、JavaScript 固有のものです。
于 2015-09-24T11:38:47.297 に答える