#javascript #angularjs #function #timeout
#javascript #angularjs #функция #время ожидания
Вопрос:
Я новичок в Angular и пытаюсь реализовать логику для повторной попытки вызова функции, если она возвращает false.
Ниже приведен мой фрагмент кода.
var checkHeaderPos = function() {
if(CONDITION)
return true;
else
return false;
}
$timeout(function() {
checkHeaderPos();
}, 100);
Я хочу повторно вызвать эту функцию снова через 100 мс, если она возвращает false.
(Хотите вызывать, пока не вернется true)
Помогите мне добиться этого.
Комментарии:
1. Используйте $interval с аналогично методу setInterval.
2. Это не решит мою проблему. Мне, должно быть, придется написать какую-то пользовательскую логику, которая приведена в приведенном ниже ответе. Хотя спасибо. 🙂
Ответ №1:
Создайте другую функцию, которая позаботится о проверке результата и зарегистрирует timeout
с ним в качестве обратного вызова. Что-то вроде этого.
function retryFn(fn, timeout) {
if ( fn() === false ) {
setTimeout( () => retryFn(fn, timeout), timeout)
}
}
Вы бы назвали это так
retryFn(checkHeaderPos, 100)
С небольшой настройкой функции вы можете даже контролировать время ожидания от вызова к вызову
function retryFn(fn, timeout) {
if ( fn() === false ) {
setTimeout( () => retryFn(fn, timeout * 2), timeout)
}
}
Это удвоит время ожидания от повторной попытки до повторной.