Повторите вызов функции, если возвращает false по истечении времени ожидания Angular

#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)
 }
  

}

Это удвоит время ожидания от повторной попытки до повторной.