Я хочу загрузить ~ 10000 ресурсов, и выполнение всего этого сразу на этапе разрешения занимает слишком много времени из-за выполнения определенных вычислений. Затем я пришел к идее загружать ресурсы страница за страницей последовательно, однако, поскольку все эти ресурсы должны быть видны (на карте), стандартная разбивка на страницы, основанная на вводе пользователем, на самом деле не работает.
Я знаю, что обещания могут быть связаны как:
promise.then(doThis).then(doThat).then(doWhat);
И я знаю, что массив обещаний можно разрешить с помощью $q.all
, например:
$q.all([doThis, doThat, doWhat]);
Однако я хочу повторять одно и то же обещание снова и снова, пока не получу отказ.
Пример:
function next() {
var deferred = $q.defer();
if(someCondition) {
deferred.reject();
} else {
//do something
//store data somewhere
deferred.resolve();
}
return deferred.promise;
}
Допустим, эта функция делает несколько $http
вызовов и сохраняет результат где-то в сервисе/контроллере. Если он попадает в определенное условие (возможно, больше нет страниц или ошибка http), он отклоняет обещание, в противном случае он разрешает его.
Теперь я хотел бы сделать что-то вроде этого псевдокода
$q.loop(next).untilError(handleError);
Где next
будет вызываться в цикле после разрешения предыдущего вызова next
до отклонения.
Возможно ли что-то подобное?