我想从3个源URL中获取数据,这些源URL只有id。我得到的结果很好但不是按顺序。我的代码是:
var data = [{"id":"1"},{"id":"2"},{"id":"3"}];
var get = [];
for(i=0;i<(data.length);i++){
$http.get("server URL"+data[i].id)
.success(function(data) {
get.push(data);
})
.error(function(err) {
console.log(err);
});
}$scope.data= get;
我也做过研究和尝试,但无法使其正常工作。
我也尝试了this链接,但对我来说没那么有用。
答案 0 :(得分:4)
您应该使用$q.all。
var data = [{"id":"1"},{"id":"2"},{"id":"3"}],
promises = [];
for(i = 0; i < data.length; i++)
promises.push($http.get("server URL"+data[i].id));
$q.all(promises)
.then(function(result) {
$scope.data = result;
}, function(err) {
console.log(err);
});
结果将是一个数组,结果按顺序的请求。
答案 1 :(得分:0)
您可以执行以下操作:
var data = [{"id":"1"},{"id":"2"},{"id":"3"}];
var get = [];
var i = 0;
function loadDataInSequence(){
if(i<data.length){
$http.get("server URL"+data[i].id)
.success(function(data) {
get[i] = data;//calling callback
loadDataInSequence();
})
.error(function(err) {
console.log(err);
});
i++;
}
}
$scope.data= get;
答案 2 :(得分:0)
对于这种情况,有一个名为async的库。 您可以使用async parallel代替for循环。 还有像系列这样的助手,以及对不同要求的限制。