Подождите, пока все $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;
});
Спасибо за любую помощь.
Ответы
Ответ 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.
});