等待AngularJs Ajax调用完成

时间:2016-10-30 08:56:49

标签: javascript jquery ajax

我有以下Ajax调用:

for (var i=0;i<localStorage.length;i++){
  stored = localStorage.getItem(i.toString());
  id=stored.split(':');
  if ( id[0].toString()=="legislator" ){
    bioguide_id=id[1];
    $http({
      method: 'GET',
      url: 'getData.php',
      params: {fav_legislator_value: bioguide_id}
    }).then(function (response) {
      fav_legislators.push(response.data.results[0]);})
  }
}

我需要完成所有Ajax调用,并且所有结果都被推送到数组之后,只有我可以再次开始处理。我已经尝试了许多方法,使这个功能,但没有任何作用。我的整个脚本被执行然后将值推送到对我来说没用的数组。如何等待所有调用完成并且数组已完全填充。

1 个答案:

答案 0 :(得分:1)

将所有promises对象存储到一个数组中,并使用$q.all将所有承诺合并为一个承诺,只有在所有承诺都已解决后才会解决。

<强> E.g。

var promises = [];

for (var i=0;i<localStorage.length;i++){
    stored = localStorage.getItem(i.toString());
    id=stored.split(':');
    if ( id[0].toString()=="legislator" ){
        bioguide_id=id[1];
        var req = $http({
            method: 'GET',
            url: 'getData.php',
            params: {fav_legislator_value: bioguide_id}
        }).then(function (response) {
            fav_legislators.push(response.data.results[0]);
        });

        promises.push(req);
    }
}

$q.all(promises).then(function () {
    // All result is now in `fav_legislators`.
})