4 votes

Comment retourner une valeur dans un tableau décroissant d'une unité dans une boucle for ?

Je voudrais renvoyer des valeurs dans un tableau allant de 5 à 0 dans une boucle for toutes les 5 secondes. Voici mon code

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()

Mon problème est que cela renvoie 5,4,3,2,1 toutes les 5 secondes. Je voudrais qu'il renvoie 5(attendre 5sec) 4(attendre 5sec) 3(attendre 5sec) etc...

6voto

CertainPerformance Points 110949

Vous pourriez créer un rappel de délai qui s'appelle lui-même de manière récursive :

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()

Une autre option, par await ing une Promise qui se résout après quelques secondes à l'intérieur de la boucle :

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()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X