des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Js таймер на событие?

подскажите как правильно организовать простой цикл?
while (hlt1 > 0 && hlt2 > 0)
    {
        setTimeout(function () {
            hlt1 -= atk2;
            hlt2 -= atk1;
            console.log(hlt1, hlt2)
        }, 1000);  
    }


про дофига таймеров понял когда браузер положил... вижу два подхода - а какой правильней? или это вкусовщина?
  • Вопрос задан
  • 319 просмотров
Решения вопроса 2
IonDen
@IonDen
JavaScript developer. IonDen.com
while тут не нужен. Нужно сделать так: jsfiddle.net/7m6waxLm
var hlt1 = 10,
    hlt2 = 10;

function change() {
    hlt1 -= 1;
    hlt2 -= 1;
    
    var inProgress = hlt1 > 0 && hlt2 > 0;
    
    console.log(hlt1, hlt2, inProgress);
    
    if (inProgress) {
        setTimeout(change, 1000);
    }
}

setTimeout(change, 1000);
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
setTimeout выполняется асинхронно, и в вашем примере будет создано огромное кол-во практически одинаковых таймеров.
Можно обойтись одним, и удалить его, когда нужно
var myTimer = setTimeout(function () {
            hlt1 -= atk2;
            hlt2 -= atk1;
            console.log(hlt1, hlt2)
            if (hlt1 <= 0 || hlt2 <= 0) {
                clearTimeout(myTimer) // удаление таймера
            }
}, 1000);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 19:08
1500 руб./в час
27 нояб. 2024, в 18:19
2000 руб./за проект