Как вернуть одно значение в массиве, уменьшающееся на единицу в цикле for - PullRequest
4 голосов
/ 06 мая 2020

Я хотел бы возвращать значения в массиве от 5 до 0 для l oop каждые 5 секунд. Вот мой код

function x() {
let array = [1,2,3,4,5,6,7,8]
let value = array.slice(0,5)
for(i = 5-1; i>=0; i--){
    console.log(value[i])

}
setTimeout(x, 5000)
}

x()

Моя проблема в том, что он возвращает 5,4,3,2,1 каждые 5 секунд. Я хотел бы, чтобы он вернул 5 (подождите 5se c) 4 (подождите 5se c) 3 (подождите 5se c) et c ...

1 Ответ

6 голосов
/ 06 мая 2020

Вы можете сделать обратный вызов тайм-аута, который рекурсивно вызывает сам себя:

function x() {
  const array = [1, 2, 3, 4, 5, 6, 7, 8].slice(0, 5);
  function callback() {
    console.log(array.pop());
    if (array.length) setTimeout(callback, 1000); // change to 5000 in your actual code
  }
  callback();
}

x()

Другой вариант, await использование обещания, которое разрешается через несколько секунд внутри l oop:

const delay = ms => new Promise(res => setTimeout(res, ms));
async function x() {
  const array = [1, 2, 3, 4, 5, 6, 7, 8].slice(0, 5);
  for (const item of array.reverse()) {
    console.log(item);
    await delay(1000);
  }
}

x()
...