这是我从服务器获取数据的功能
function getAll_Tables() {
$scope.tableList = [];
$http({
method : 'GET',
url : '/abc/GetTables',
headers : {'Content-Type' : 'application/json'}
}).success(function(data) {
$('#T_LoaderSpinner').hide();
if (data.StatusCode === 101) {
if (data.Data != null) {
for (var i = 0; i < data.Data.length; i++) {
$scope.tableList.push(data.Data[i]);
}
}
} else {
alert("We could not process your request......Please try later.")
}
})
.error(function(data) {
$('#T_LoaderSpinner').hide();
alert("We could not process your request......Please try later.")
});
}
我使用该数据的另一个功能是:
$scope.load_policy = function(id, type) {
$scope.getRuleList();
getAll_ScoringTables();
alert(JSON.stringify($scope.tableList));
}
我的tableList没有得到更新 - 如何在这里获取更新的tableList?
答案 0 :(得分:4)
这是一种更舒适的方式,使用促销
var promise1 = $http({method: 'GET', url: 'a/pi-one-url', cache:
'true'});
var promise2 = $http({method: 'GET', url: '/api-two-url', cache: 'true'});
$q.all([promise1, promise2]).then(function(data){
console.log(data[0], data[1]);
});
答案 1 :(得分:1)
您可能需要返回http请求,只需处理加载策略中的成功,或者您可以使用回调来调用从success方法调用的匿名函数。这将在成功完成后调用您的匿名函数
function getAll_Tables(callback) {
$scope.tableList = [];
$http({
method : 'GET',
url : '/abc/GetTables',
headers : {'Content-Type' : 'application/json'}
}).success(function(data) {
$('#T_LoaderSpinner').hide();
callback();
}).error(function(data) {
$('#T_LoaderSpinner').hide();
alert("We could not process your request......Please try later.")
});
}
$scope.load_policy = function(id, type) {
$scope.getRuleList(function() {
getAll_ScoringTables();
alert(JSON.stringify($scope.tableList));
});
}
所以其他选项之一就是
function getAll_Tables(callback) {
$scope.tableList = [];
return $http({
method : 'GET',
url : '/abc/GetTables',
headers : {'Content-Type' : 'application/json'}
});
}
$scope.load_policy = function(id, type) {
$scope.getRuleList.success(function() {
getAll_ScoringTables();
alert(JSON.stringify($scope.tableList));
}).error(function() {
alert('failed');
});
}
答案 2 :(得分:1)
您的问题是getAll_Tables()
是异步的,因此在使用它的函数中,当您执行alert
时尚未获取数据。你需要等待这个承诺完成。我建议进行以下更改:
function getAll_Tables() {
$scope.tableList = [];
return $http({ // ADDED RETURN HERE
method : 'GET',
url : '/abc/GetTables',
headers : {'Content-Type' : 'application/json'}
}).success(function(data) {
$('#T_LoaderSpinner').hide();
if (data.StatusCode === 101) {
if (data.Data != null) {
for (var i = 0; i < data.Data.length; i++) {
$scope.tableList.push(data.Data[i]);
}
return; // ADDED RETURN HERE
}
} else {
alert("We could not process your request......Please try later.")
}
})
.error(function(data) {
$('#T_LoaderSpinner').hide();
alert("We could not process your request......Please try later.")
});
}
因此,我们将$http
函数从getAll_Tables()
返回,因此我们可以在其他函数中.then
,或者换句话说,等到请求完成之前继续使用.then
函数中的代码。
$scope.load_policy = function(id, type) {
$scope.getRuleList();
getAll_ScoringTables()
.then(function() {
alert(JSON.stringify($scope.tableList)); // tableList has the correct data now
})
}