У меня есть функция, выполняющая рекурсивные вызовы. Структура выглядит примерно так:
var getData = function(data){
makeDbCall().then(function(response){
if(response.something === someCondition){
foreach(object in response)
getData(object ); //calls itself over and over
}
}
)
};
Общая идея (чтобы не быть не по теме) состоит в том, чтобы, скажем, получить все отели в городе, все номера в этих отелях, всю мебель в этих номерах и т. Д. Обычный вызов $ q.all foreach похож на this - функция определяет:
var promises = [];
а затем возвращает $ q.all:
return $q.all(promises);
Моя проблема в том, что я не знаю, откуда вернуть $ q.all - если я верну его из "getData", он вернется на первой итерации рекурсии и (как я понимаю) может не включать последующие итерации, если первоначальные вызовы разрешаются до того, как будут отправлены новые.
Если я верну его ПОСЛЕ вызова getData()
, я получу ту же проблему, потому что, как мы все знаем, javascript продолжает работу, не дожидаясь вызовов, если мы не отложим.
Я понимаю, что это расплывчатый вопрос, и меня вполне устраивает расплывчатый ответ. Я просто пытаюсь понять, не упускаю ли я чего-то абсолютно простого или это невозможно. (Я знаю, как это сделать очень грязно, но мне бы очень хотелось как-нибудь использовать $ q.all).
getData
выполнялись последовательно или параллельно? Возвращают лиgetData
функции обещания? - person georgeawg   schedule 17.12.2015