У меня есть функция, выполняющая рекурсивные вызовы. Структура выглядит следующим образом:
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 Еогеасп вызов что-то вроде this - функция определяет:
var promises = [];
, а затем возвращает $ q.all:
return $q.all(promises);
Моя проблема заключается в том, что я не знаю, гдеreturn $ q.all from - если я верну его из «getData», он вернется на первую итерацию рекурсии, и (как я понимаю) может не включать последующие итерации, если начальные вызовы разрешаются до того, как новые будут нажаты.
Если я верну его после вызова getData()
, я получаю ту же проблему, потому что, как мы все знаем, javascript продолжается, не дожидаясь вызовов, если мы не отложим их.
Я понимаю, что этот вопрос расплывчатый, и я полностью в порядке с неопределенным ответом. Я просто пытаюсь понять, нет ли у меня чего-то абсолютно простого или если это невозможно. (Я знаю, как это сделать очень грязно, но мне бы очень хотелось использовать $ q.all как-то).
Вы хотите, чтобы функции 'getData' выполнялись последовательно или параллельно? Возвращают ли функции 'getData' обещания? – georgeawg
Параллельный. В противном случае я бы просто связал их, как предложил Витторе. makeDbCall() автоматически обещает, будет ли его http или Restangular, getData CAN возвращать $ q.all (обещания), вопрос в том, нужно ли это делать. Я думаю, что я просто сделаю это «гетто» и сравню счет с возвращаемой длиной списка объектов. – VSO