Ситуация!
Вот примерное воспроизведение рассматриваемой проблемы с настройкой идентификатора интервала и извлечением его.Существует 3 отдельных события, которые вызываются в зависимости от нажатия кнопки.
Одним из событий является запрос POST с использованием axios.Второй процесс - это, по сути, асинхронная функция, ожидающая завершения запроса POST.
Каждый интервал назначается переменной класса, а при вызове процесса другие процессы очищаются, чтобы избежать ненужного опроса django.view.
Все прекрасно работает с одним нажатием каждой кнопки процесса.
Проблема?
Так как для каждого события есть 3 отдельные кнопки, может быть возможность снова нажать одну из кнопок, что вызывает другое событие для принятияпоместите и также завершите другое событие, НО , процесс, кажется, не завершается при последовательном нажатии одной и той же кнопки.
Цикл событий
- Кнопка 1 нажата.(Все работает хорошо.)
- Нажата кнопка 2.(Все работает хорошо. Все счастливы.)
- Нажата кнопка 3.(Все работает хорошо. Опять.)
- Нажата кнопка 1.(Все работает хорошо.)
- Нажата кнопка 1.(Все работает хорошо. Опять.)
Нажата кнопка 2.(Процесс 1 не был очищен. Процесс два начался одновременно.)
Нажата кнопка 1.(Процессы 1 и 2 выполняются одновременно.) <Обращаясь к двум последним событиям, которые имели место. </p>
Теперь, как мы видели по какой-то причине, другой цикл событий не 'Кажется, это заканчивается последовательными щелчками.Похоже, идентификаторы перезаписаны, и чистый интервал больше не может найти интервал после перезаписи.
Пример кода
class Handler {
constructor () {
this.interval1 = 0;
this.interval2 = 0;
this.interval3 = 0;
}
getToken(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
process_one () {
clearInterval(this.interval2);
this.interval1 = setInterval(function() {
console.log(" Polling 1. ")
},300);
}
async process_two () {
clearInterval(this.interval1);
var scope_obj = this;
this.interval2 = setInterval(async function() {
console.log(" Polling 2. ");
var data = await scope_obj.process_three();
}, 500);
}
async process_three () {
return axios( {
url: "",
data:{"data":"LOL"},
headers : {
'X-CSRFToken': this.getToken('csrftoken'),
'Content-Type': 'application/x-www-form-urlencoded'
}
} )
}
}
let event = new Handler();
$("#p1").click(function() {
console.log("P1 started.")
event.process_one ();
})
$("#p2").click(async function() {
console.log("P2 started.")
event.process_two ();
})
$("#p3").click(function() {
console.log("P3 started.")
event.process_three ();
})
HTML-код.
<div class="row">
<div class="col-lg-12">
<button type="button" class="btn btn-warning" id="p1">P1</button>
<button type="button" class="btn btn-warning" id="p2">P2</button>
<button type="button" class="btn btn-warning" id="p3">P3</button>
</div>
</div>