Выход из цикла setTimeout в запросе AJAX GET - PullRequest
0 голосов
/ 31 октября 2019

У меня есть функция, которая выполняет запрос AJAX GET каждую 1 секунду, чтобы получить данные и обновить индикатор выполнения. Я использую setTimeout для достижения этой цели. Вот код:

function check_progress(thread_id) {
    function worker() {
        $.get('ecab_run/progress/' + thread_id, function(data) {
            progress = data['progress'];
            status_message = data['status_message'];
            if (progress < 100) {
                $('.progress-bar').css('width', progress+'%').attr('aria-valuenow', progress);
                $('.progress-bar')[0].innerHTML = progress+"%";
                $('#status-message')[0].innerHTML = status_message
                timer = setTimeout(worker, 1000);
                // console.log(timer);
            } else if ( progress == 100 ){
              $('.progress-bar').css('width', progress+'%').attr('aria-valuenow', progress);
              $('.progress-bar')[0].innerHTML = progress+"%";
            }
        })
        return status_message;
    }
    worker();
}

Функция вызывается после успешного POST как таковая:

$('#ecab-run-dates').submit(function(e){
  e.preventDefault();
  var formData = $('form').serialize();

  $.ajax({
    url:'',
    type:'post',
    data:formData,
    success:function(data){
      thread_id = data;
      $('.progress-container').show();
      check_progress(thread_id);
      }
    });
  });

Бэкэнд возвращает сообщения о состоянии при выполнении закулисных функций, икогда он встречает ошибку, он возвращает Error: could not compile data или что-то подобное.

Моя первоначальная мысль заключалась в том, чтобы использовать сообщение об ошибке в качестве условия для остановки функции check_progress. Я прочитал несколько ответов, в том числе этот тот, который говорит использовать clearTimeout, но я не совсем уверен, как структурировать это в моем коде. Может ли кто-нибудь помочь мне выйти из цикла setTimeout при появлении ошибки?

...