@montakarlo

Помощь с асинхронностью JS?

Делаю мини-игру, есть здоровье персонажа, по нажатию на "Q" от него отнимается 10 c помощью функции damage.
Нужно что-то вернуть в функцию fight, чтобы в тот момент, когда здоровье будет ниже 0, в консоль вывелось сообщение
"finish".
Функция fight должна заканчивать свое выполнение тогда, когда здоровье будет 0

let health = 50

async function fight(){
  addKeysEvents();
  return new Promise((resolve) =>

  })
}

function damage(){
  health = health -10;
}

function addKeysEvents(){
  document.addEventListener('keydown', function(event){
    if (event.code == 'KeyQ'){
      damage();
    }
  })
}
fight()
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 3
duboloms
@duboloms
Люблю есть дубы с кетчупом. Веб-разработчик.
if (health <= 0){
  console.log("финиш бл*");
}

Изменено:
А также:
function damage(){
  health -= 10;
}
function addKeysEvents(){
  document.addEventListener('keydown', function(event){
    if (event.key == 'Q'){
      damage();
    }
  })
}
Ответ написан
@be_a_man
Promise вызывает resolve при успешном выполнении и reject при ошибке.

В вашем случае скорее всего так, но архитектура кода очень странная
async function fight(){
  addKeysEvents();
  return new Promise((resolve) =>
    health <= 0 && resolve('finish')
  })
}

fight().then( v => { console.log(v) })
Ответ написан
Комментировать
montakarlo, Давай попробуем подумать.
У тебя в функции fight есть кусок кода
async function fight(){
  addKeysEvents();
  return new Promise((resolve) =>

  })
}

И почему то эта функция async хотя возвращает Promise это не логично, функции делают асинхронными чтобы в ней можно было делать await и работать с промисами как с обычными функциями
https://developer.mozilla.org/uk/docs/Web/JavaScri...
Потом, у тебя вызов addKeysEvents(); стоит выше return new Promise хотя логично запихнуть его внутрь, тогда addKeysEvents может вернуть промис, который зарезолвится когда жизни будет меньше нуля
https://habr.com/ru/company/mailru/blog/269465/
если таки оставить fight с async, можно убрать конструкцию return new Promise((resolve) =>
и использовать await а промис оставить только в addKeysEvents
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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