У меня есть вопрос о проблеме, с которой я сталкиваюсь. Я использую AngularJS как мои рамки и не имеют доступа к jQuery или Lodash.Рекурсивная функция Async
Проблема
У меня есть функция под названием "обновить". Эта функция выполняет асинхронный вызов через угловой $ http для получения новых данных с сервера. Сервер дает только 25 новых обновлений со дня, указанного мной. Поэтому, чтобы получить все новые сообщения, мне нужно вызвать сервер (и обновлять «updateDate» каждый раз, когда я получаю данные), пока он не сообщит мне, что у него больше нет сообщений (пустой массив).
Пример кода
$scope.refresh = function() {
var date = new Date();
$http({
method: 'GET',
url: 'http://path.to.my.server',
timeout: 6000
}).then(function (success) {
date = success.date[0].date; //0 is always the newest message
callback(success.data);
//Do some stuff with the data
}, function (error) {
console.error("Could not retrieve new messages: \n", error.data);
errcallback(error);
});
}
То, что я пытался
Я пытался получить установить запрос в виде отдельной функции и совершать звонки на него как вы бы сделали с нормальной функцией a-sync.
Я также пробовал цикл while и устанавливал логическое значение, когда я закончил со сбором. Единственная проблема заключается в том, что цикл while не ждет завершения вызова (иначе это не будет async) и делает довольно впечатляющий цикл (еще не бесконечный, но достаточно, чтобы разбивать мою программу).
Я думал о цикле for, но я не знаю, сколько итераций я должен сделать. Это может быть 1, но также может быть 5 или более.
Я знаю, как работают рекурсивные функции, но я не знаю, как использовать рекурсивную функцию async. Любые советы или решения приветствуются. (Мне не обязательно быть рекурсивным, если кто-нибудь знает другое решение)
как вы послали дату в WebService? – AlainIb
Итак, вы уже пытались выполнить '$ scope.refresh()' в обратном вызове '.then()'? –