Почитайте документацию по промисам, у вас куча говна в коде.
Зачем 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;