JS как остановить предыдущее, пока истина при повторном вызове - PullRequest
0 голосов
/ 28 мая 2020
• 1000 life "The while l oop", но каждый раз, когда я нажимаю новую клавишу, чтобы изменить направление змеи, стек вызовов l oop.

Я пытался найти способы остановить это, но понятия не имею.

Есть ли у кого-нибудь идеи, как подойти к этой проблеме?

const changeDirection = async key => {
  while(true){
    move(key);
    await sleep(10 * speed);
  }
}

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Может быть проще, чем отслеживать идентификаторы интервалов, иметь один интервал, который выполняется постоянно. Когда вызывается changeDirection, просто переназначьте переменную, на которую есть ссылка внутри интервала:

let key;
setInterval(() => {
  if (key) {
    move(key);
  }
}, 10 * speed);
const changeDirection = (keyParam) => {
  key = keyParam;
};
0 голосов
/ 28 мая 2020

Я нашел ответ на это, используя setInterval


let prevKey = // last key stroke
let prevID  = //Interval Id 

const changeDirection = async key => {
  if(prevKey !== key){
    clearInterval(prevID)
    prevKey = key
  }
  prevID = setInterval( () => {
    move(key);
  }, 10 * speed)

}

, сохранив предыдущий ключ и идентификатор интервала и очистив интервал, когда происходит новое действительное ключевое событие

...