<script>
var status = {{ check_status }};
call_polling = function() {
// polling request to API (async)
success:function(result){
status = result.check_status;
}
}
if(status) {
var timer = setInterval(function() { call_polling(); }, 2000);
}
else{
clearInterval(function(){ call_polling();});
}
</script>
Итак, у меня есть код с асинхронным запросом для просмотра состояния внутреннего процесса.Итак, сначала я установил status
в 1 (т.е. check_status через контекст в Django).Таким образом, если status
равно 1, то строка var timer
начнет вызывать функцию call_polling()
каждые 2 секунды. Таким образом, call_polling()
запросит API для проверки статуса и при успешном ответе, таком как {'check_status': 1}
, передаст status = 1
.Указывает, что бэкэнд-процесс все еще работает.Как только бэкэнд-процесс завершен, я передаю ответ JSON как {'check_status' : 0}
, который должен быть status=0
, и тогда он не переходит в if
, а вместо этого очищает интервал опроса (поскольку мы знаем, что фоновая обработка уже завершена)и асинхронный вызов API должен прекратиться.
Но это не работает, и JavaScript все еще выполняет call_polling () к запросу API каждые 2 секунды.Я выяснил причину, поскольку var status
объявлено глобально как 1
, и даже если я заменю status = result.check_status
.После контекста функции он всегда останется 1 и войдет в цикл if;независимо от того, что он получает от ответа JSON.
Итак, вопрос в том, как я смогу обновить status
и очистить время ожидания (т. е. перейти к другой части), если result.check_status
равно 0 (т. е. {'check_status': 2} как ответ от вызова API) ??