@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?
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 1
Очевидно же, обернуть setInterval в промис и кинуть результат в resolve
При этом в твоем коде нужно чистить не только clearInterval но и clearTimeout, даже если второй игрок умрет тоже то с промисом ты это не отследишь, resolve выаолняется только один раз. Поэтому если один игрок умер, нет смысла ждать завершения второго setTimeout, не вижу вообще смысла разносить это в разные setTimeout если первый всегда бьет первым

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

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

Войти через центр авторизации
Похожие вопросы