从$ http.get()返回的数据不是序列

时间:2016-04-12 06:32:32

标签: javascript angularjs

我想从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链接,但对我来说没那么有用。

3 个答案:

答案 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循环。 还有像系列这样的助手,以及对不同要求的限制。