У меня есть функция, которая выполняет запрос 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
при появлении ошибки?