У меня есть этот кусок кода:
class CombatLog {
constructor(){
this.idMsg = 0;
this.timerInterval;
}
startTimer(){
this.timerInterval = setInterval(this.combatStartLog, 2000);
$('#combatLog').empty();
}
combatStartLog(){
console.log(this.idMsg);
switch (this.idMsg){
case 3:
clearInterval(this.timerInterval);
$('#combatLog').empty();
break;
case 2:
$('<p>', {
class: 'combatText',
id: `${this.idMsg}`
}).appendTo('#combatLog');
$(`#${this.idMsg}`).append(`FIGHT!`);
this.idMsg = 3;
break;
case 1:
$('<p>', {
class: 'combatText',
id: `${this.idMsg}`
}).appendTo('#combatLog');
$(`#${this.idMsg}`).append(`Prepare your potions...`);
this.idMsg = 2;
break;
case 0:
$('<p>', {
class: 'combatText',
id: `${this.idMsg}`
}).appendTo('#combatLog');
$(`#${this.idMsg}`).append(`Unsheathe your weapons...`);
this.idMsg = 1;
break;
default:
this.idMsg = 0;
}
}
Желаемое поведение будет:
- я называю метод
startTimer()
- Он вызывает
combatStartLog()
как интервал
- В каждом интервале свойство
idMsg
объекта попадает в соответствующий случай
case '3'
очищает интервал и прерывает цикл.
Что на самом деле происходит:
- Я не знаю, почему в первом интервале
idMsg
создается как undefined
, хотя его начальное значение задано в конструкторе:
Конструктор
constructor(){
this.idMsg = 0;
this.timerInterval;
}
- Я «исправил» проблему выше, добавив регистр по умолчанию с кодом
this.idMsg = 0;
, и когда он достигает case 3 , idMsg устанавливается на 0 но интервал никогда не очищается и цикл продолжается и включается и включается вечно.