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);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
21 мая 2024, в 12:52
2500 руб./за проект
21 мая 2024, в 12:52
4000 руб./за проект
21 мая 2024, в 12:40
1500 руб./в час