Подтвердить что ты не робот

Подождите, пока все $http-запросы будут завершены в Angular JS

У меня есть страница, чем может сделать различное количество запросов $http в зависимости от длины переменных, а затем я хочу отправить данные в область только тогда, когда все запросы будут завершены. Для этого проекта я не хочу использовать jQuery, поэтому, пожалуйста, не включайте jQuery в свой ответ. На данный момент данные отправляются в область действия по мере завершения каждого из запросов, чего я не хочу.

Вот часть кода, который у меня есть.

for (var a = 0; a < subs.length; a++) {
  $http.get(url).success(function (data) {
    for (var i = 0; i < data.children.length; i++) {
      rData[data.children.name] = data.children.age;
    }
  });
}

Вот часть, с которой я скептически отношусь, потому что что-то должно быть аргументом для $q.all(), но оно не упоминается в документах для Angular, и я не уверен, что это значит.

$q.all().then(function () {
  $scope.rData = rData;
});

Спасибо за любую помощь.

4b9b3361

Ответ 1

$http call всегда возвращает обещание, которое можно использовать с функцией $q.all.

var one = $http.get(...);
var two = $http.get(...);

$q.all([one, two]).then(...);

Документация довольно понятна:

все (promises)

promises - массив или хэш promises.

В вашем случае вам нужно создать массив и нажать все вызовы в него в цикле:

var arr = [];

for (var a = 0; a < subs.length; ++a) {
    arr.push($http.get(url));
}

$q.all(arr).then(function (ret) {
    // ret[0] contains the response of the first call
    // ret[1] contains the second response
    // etc.
});