@dmitriyuvin
FullStack developer ( Laravel & Vue )

Как получить значение из интервала?

var promise = new Promise((resolve, reject) => {
        let intervalId = setInterval(function() {
            let damage = getDamage(firstFighter, secondFighter);
            if (damage > 0) {
                console.log(secondFighterHealth + "-" + damage);
                secondFighterHealth -= damage;
            }else{
                console.log('Второй блокировал удар первого!');
            }
            console.log('Second Health: ' + secondFighterHealth);

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

            console.log('First Health: ' + firstFighterHealth);

            if(firstFighterHealth <= 0) {
                window.winner = secondFighter;
                clearInterval(intervalId);
                resolve(winner);
            }else if(secondFighterHealth <= 0) {
                window.winner = firstFighter;
                clearInterval(intervalId);
                resolve(winner);
            }
        }, 1000);
    });
    promise.then(
        result => alert('Winner - ' + winner.name)
    )

В интервале, путем отнимания жизни у каждого персонажа выбиратся победитель.
Надо вернуть обьект победителя из функции.
Через промисы не работает.
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
Почитайте документацию по промисам, у вас куча говна в коде.
Зачем async в вашем случае, зачем await? Вы точно понимаете как их использовать?
Моя рекомендация, забыть о них на какоето время и научиться писать рабочий код на чистых Promise и только когда это все поймете, можно попробовать вернуться к async и await.
if (firstFighterHealth <= 0) {
        winner = secondFighter;
        clearInterval(intervalId);
        resolve(winner);
        // console.log(winner.name);
        // return winner;
      } else if (secondFighterHealth <= 0) {

У вас выигрывает или первый игрок или второй, третьего не дано, зачем тут else if? Используйте обычный else
let damage = getDamage(firstFighter, secondFighter);
if (damage > 0) {

Два раза похожий код, зачем повреждения выносить в переменную, почему не написать
if (getDamage(firstFighter, secondFighter) > 0)
if (getDamage(secondFighter, firstFighter) > 0)
Почему в функцию getDamage третим параметром не передать текущий урон, и убрать логику блокирования в общую функцию, она ведь повторяется, можно сразу вернуть новый урон
firstFighterHealth = getDamage(firstFighter, secondFighter, firstFighterHealth )
secondFighterHealth = getDamage(secondFighter, firstFighter, secondFighterHealth )
Перед интервалом нужно сделать let firstFighterHealth = secondFighterHealth = 0;
Ответ написан
Ваш ответ на вопрос

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

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