Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Как дождаться окончания цикла обещаний? (https://javascript.ru/forum/angular/55756-kak-dozhdatsya-okonchaniya-cikla-obeshhanijj.html)

denni 13.05.2015 09:44

Как дождаться окончания цикла обещаний?
 
Подскажите, как такое сделать. Мне нужно в цикле запустить асинхронные запросы и дождаться их завершение.
И как передать в обработчики текущее значение i ?

что-то типа:
for (var i = 0; i < links.length; i++) {
  $http.get(link[i]).
    success(function(data, status, headers, config) {
      >> response[i] = data;
    }).
    error(function(data, status, headers, config) {
      >> err[i] = status;
    });
}

и вот тут надо дождаться, когда будут получены все ответы и продолжить выполнение.

FireVolkhov 13.05.2015 10:08

$q.all([promise1, promise2, ...])
  .then (results) ->
    [result1, result2, ...] = results

denni 13.05.2015 11:33

Цитата:

Сообщение от FireVolkhov (Сообщение 370508)
$q.all([promise1, promise2, ...])
  .then (results) ->
    [result1, result2, ...] = results

В том-то и дело, что я заранее не знаю, сколько будет асинхронных запросов.

FireVolkhov 14.05.2015 10:03

Цитата:

Сообщение от denni
В том-то и дело, что я заранее не знаю, сколько будет асинхронных запросов.

Что значит "я заранее не знаю, сколько будет асинхронных запросов"? в твоем примере кода "for (var i = 0; i < links.length; i++) {" массив links определенной длины
Вывод: Неверно поставлен вопрос -> дан не тот ответ

denni 14.05.2015 10:11

Цитата:

Сообщение от FireVolkhov (Сообщение 370508)
$q.all([promise1, promise2, ...])
  .then (results) ->
    [result1, result2, ...] = results

Премного благодарен!
Вот так для меня более очевидно:
var promises = [];

for(var i = 0; i < links.length; i++) {
  promises.push(... async method ...);
}

$q.all(promises).then(...)


Часовой пояс GMT +3, время: 18:40.