@dmitriyuvin
FullStack developer ( Laravel & Vue )

Как вернуть значение из setTimeout внутри setInterval?

export function fight(firstFighter, secondFighter) {
// Обьявление переменных
let promise = new Promise(function(resolve, reject){
        let intervalId = setInterval(winner = function(){
            let timeout1 = setTimeout(function () {
                damage = getDamage(firstFighter, secondFighter);
                if (damage > 0) {
                    console.log(secondFighterHealth + "-" + damage);
                    secondFighterHealth -= damage;
                } else {
                    console.log('Второй блокировал удар первого!');
                }

                if (secondFighterHealth <= 0) {
                    window.winner = firstFighter;
                    clearInterval(intervalId);
                    resolve(winner);
                    clearTimeout(timeout2);

                }
                console.log('Second Health: ' + secondFighterHealth);
                console.log('PAUSE!');
            }, 250);


            let timeout2 = setTimeout(function(){
                damage = getDamage(secondFighter, firstFighter);
                if (damage > 0) {
                    console.log(firstFighterHealth + "-" + damage);
                    firstFighterHealth -= damage;
                } else {
                    console.log('Первый блокировал удар второго!');
                }

                if (firstFighterHealth <= 0) {
                    window.winner = secondFighter;
                    clearInterval(intervalId);
                    resolve(winner);
                    clearTimeout(timeout1);
                }
                console.log('First Health: ' + firstFighterHealth);
                console.log('PAUSE!');
            }, 500);
        }, 750);
    });
    promise.then(function(){
       console.log(window.winner.name);
    });
}

Вызов fight?

const winner = fight(...selectedFighters.values());
showWinnerModal(winner);

Как достать значение winner?
  • Вопрос задан
  • 259 просмотров
Пригласить эксперта
Ответы на вопрос 1
Очевидно же, обернуть setInterval в промис и кинуть результат в resolve
При этом в твоем коде нужно чистить не только clearInterval но и clearTimeout, даже если второй игрок умрет тоже то с промисом ты это не отследишь, resolve выаолняется только один раз. Поэтому если один игрок умер, нет смысла ждать завершения второго setTimeout, не вижу вообще смысла разносить это в разные setTimeout если первый всегда бьет первым

Не понял только зачем дублировать вопрос слегка изменив код.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы